簡體   English   中英

選擇並繪制高於閾值的值

[英]Select and plot value above a threshold

我有一個圖中有一些噪聲成分。 我打算從該圖中選擇數據,最好是在閾值以上,我打算將其在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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM