指定轴的极限

时间:2014-10-24 16:55:44

标签: matlab

我试图在MatLab中限制x轴,即频率轴为4 Hz。这是我使用的代码:

        subplot(3,1,2);
        %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);
        xlabel('Frequency');
        ylabel('Signal');
        xlim([1,4]);
        ylim([1,4]);
        plot(xdft,ydft);

然而,我的是实时信号绘图,x轴和y轴都根据传入的数据包不断变化。如何将x轴限制为4 Hz?

3 个答案:

答案 0 :(得分:4)

当绘制MATLAB时,会自动尝试使轴与数据的动态范围拟合。因此,如果您想确保只绘制一个给定的范围,您需要在调用绘图之后指定它以强制MATLAB执行此操作,否则它将无法完成,您将无法使用整个数据。

这是一个非常简单的代码,我在调用plot之前或之后调用xlim。看到区别?

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')

产生这个:

enter image description here

答案 1 :(得分:2)

您必须将轴的XLimMode(和YLimMode)属性设置为manual。但即使您这样做,每次拨打plot(...)都会将其重置为auto并使您的轴限制陷入困境。

最干净的方法是首先在任何循环之外定义你的轴和你的图(不要忘记获取它们的句柄),然后在更新数据时只需更新XDataYData行对象,使用set方法。 set方法只会更新您在参数中传递的属性,因此不会修改XLimMode属性。

%// 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 ) ;

答案 2 :(得分:0)

您可以使用axis function matlab

中定义的功能轴