我试图在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?
答案 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')
产生这个:
答案 1 :(得分:2)
您必须将轴的XLimMode
(和YLimMode
)属性设置为manual
。但即使您这样做,每次拨打plot(...)
都会将其重置为auto
并使您的轴限制陷入困境。
最干净的方法是首先在任何循环之外定义你的轴和你的图(不要忘记获取它们的句柄),然后在更新数据时只需更新XData
和YData
行对象,使用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
中定义的功能轴