I'm trying to limit x axis, i.e., frequency axis to 4 Hz in MatLab. This is the code I used:
%Fse = 220;
time = 0:1/fse:secBuffer-1/fse;
%a = eegCounter;
c = eegBuffer;
wo = 50 / (1000/2);
bw = wo / 60;
[b,a] = iirnotch(wo,bw);
y = filter(b,a,c);
ydft = fft(c);
xdft = fft(y);
However mine is live signal plotting and both x axis and y axis keep changing according to incoming packets. How to limit x axis to 4 Hz?
When plotting MATLAB automatically tries to fit the axis with the dynamic range of the data. Therefore if you want to make sure only a given range is plotted, you need to specify it AFTER the call to plot to force MATLAB to do it, otherwise it won't and you will be stuck with the whole data.
Here is a very simple code in which I call
xlim either before or after the call to plot. See the difference?
clear clc close all x = 1:50; y = x.^2; figure subplot(1,2,1) xlim([1 20]) plot(x,y) title('xlim before call to plot') subplot(1,2,2) plot(x,y) xlim([1 20]) title('xlim after call to plot')
You have to set the
YLimMode) properties of the axes to
manual. But even if you do so every call to
plot(...) will reset that to
auto and mess up your axes limits.
The cleanest way is to first define your axes and your plots outside of any loop (not forgetting to get their handle), then when you update the data just update the
YData of the line objects, using the
set method. The
set method will only update the property you pass in parameters, so it will not modify the
%// This part of the code should run only once h.ax = subplot(3,1,2) ; %// get the handle of the axes h.line = plot(0) ; %// create an empty line plot set(h.ax , 'XLimMode','manual' , 'XLim',[1 4]) ; %// define the properties of the axes (X) set(h.ax , 'YLimMode','manual' , 'YLim',[1 4]) ; %// define the properties of the axes (Y) xlabel('Frequency'); ylabel('Signal'); %// %// This part of the code is the loop where you calculate and update your plot %// ... %// now do your calculations %// ... %// when it is time to update, just call: set( h.line, 'XData',xdft 'YData',ydft ) ;
You can use the function axis as defined there axis function matlab