Select 并绘制高于阈值的值
Select and plot value above a threshold
我有一个情节,其中有一些噪音成分。我计划 select 来自该图的数据最好高于阈值,在我的情况下,我计划将其保持在 Y 轴上的 2.009。并绘制仅在其上方的线条。如果低于这个值,我想将其绘制为 0。
如图所示
t1=t(1:length(t)/5);
t2=t(length(t)/5+1:2*length(t)/5);
t3=t(2*length(t)/5+1:3*length(t)/5);
t4=t(3*length(t)/5+1:4*length(t)/5);
t5=t(4*length(t)/5+1:end);
X=(length(prcdata(:,4))/5);
a = U(1 : X);
b = U(X+1: 2*X);
c = U(2*X+1 : 3*X);
d = U(3*X+1 : 4*X);
e = U(4*X+1 : 5*X);
figure;
subplot (3,2,2)
plot(t1,a);
subplot (3,2,3)
plot(t2,b);
subplot(3,2,4)
plot(t3,c);
subplot(3,2,5)
plot(t4,d);
subplot(3,2,6)
plot(t5,e);
subplot(3,2,1)
plot(t,prcdata(:,5));
figure;
A=a(a>2.009,:);
plot (t1,A);
这段代码将数据(在图像中每 2.8 秒分成 5 份,我计划在前 2.8 秒内使用阈值。我还有另一个代码,但我不确定它是否有效,因为它花了好久没分析了
figure;
A=a(a>2.009,:);
plot (t1,A);
for k=1:length(a)
if a(k)>2.009
plot(t1,a(k)), hold on
else
plot(t1,0), hold on
end
end
hold off
问题是您可能尝试绘制数千次并在绘图上添加数千个点,这会导致您的计算机出现严重的内存和图形问题。您可以做的一件事是预处理所有信息,然后一次绘制所有信息,这将大大减少时间。
figure
threshold = 2.009;
A=a>threshold; %Finds all locations where the vector is above your threshold
plot_vals = a.*A; %multiplies by logical vector, this sets invalid values to 0 and leaves valid values untouched
plot(t1,plot_vals)
因为 MATLAB 是一种高度矢量化的语言,这种格式不仅由于没有 for 循环而计算速度更快,而且由于图形引擎不需要处理数千个单独点。
MATLAB 处理绘图的方式是为每条线添加句柄。当您绘制一个矢量时,MATLAB 能够简单地将矢量存储在一个地址中并在绘制时调用它一次。但是,当单独调用每个点时,MATLAB 必须将每个点存储在内存中的单独位置并单独调用所有这些点,并以图形方式完全单独处理每个点。
此处根据请求进行编辑
情节(t1(A),plot_vals(A))
我有一个情节,其中有一些噪音成分。我计划 select 来自该图的数据最好高于阈值,在我的情况下,我计划将其保持在 Y 轴上的 2.009。并绘制仅在其上方的线条。如果低于这个值,我想将其绘制为 0。 如图所示
t1=t(1:length(t)/5);
t2=t(length(t)/5+1:2*length(t)/5);
t3=t(2*length(t)/5+1:3*length(t)/5);
t4=t(3*length(t)/5+1:4*length(t)/5);
t5=t(4*length(t)/5+1:end);
X=(length(prcdata(:,4))/5);
a = U(1 : X);
b = U(X+1: 2*X);
c = U(2*X+1 : 3*X);
d = U(3*X+1 : 4*X);
e = U(4*X+1 : 5*X);
figure;
subplot (3,2,2)
plot(t1,a);
subplot (3,2,3)
plot(t2,b);
subplot(3,2,4)
plot(t3,c);
subplot(3,2,5)
plot(t4,d);
subplot(3,2,6)
plot(t5,e);
subplot(3,2,1)
plot(t,prcdata(:,5));
figure;
A=a(a>2.009,:);
plot (t1,A);
这段代码将数据(在图像中每 2.8 秒分成 5 份,我计划在前 2.8 秒内使用阈值。我还有另一个代码,但我不确定它是否有效,因为它花了好久没分析了
figure;
A=a(a>2.009,:);
plot (t1,A);
for k=1:length(a)
if a(k)>2.009
plot(t1,a(k)), hold on
else
plot(t1,0), hold on
end
end
hold off
问题是您可能尝试绘制数千次并在绘图上添加数千个点,这会导致您的计算机出现严重的内存和图形问题。您可以做的一件事是预处理所有信息,然后一次绘制所有信息,这将大大减少时间。
figure
threshold = 2.009;
A=a>threshold; %Finds all locations where the vector is above your threshold
plot_vals = a.*A; %multiplies by logical vector, this sets invalid values to 0 and leaves valid values untouched
plot(t1,plot_vals)
因为 MATLAB 是一种高度矢量化的语言,这种格式不仅由于没有 for 循环而计算速度更快,而且由于图形引擎不需要处理数千个单独点。
MATLAB 处理绘图的方式是为每条线添加句柄。当您绘制一个矢量时,MATLAB 能够简单地将矢量存储在一个地址中并在绘制时调用它一次。但是,当单独调用每个点时,MATLAB 必须将每个点存储在内存中的单独位置并单独调用所有这些点,并以图形方式完全单独处理每个点。
此处根据请求进行编辑 情节(t1(A),plot_vals(A))