2017-02-16 845 views
1

我有一個矩陣,其中一些值有-1,表示存在錯誤。通常我只是使用ylim([0 100])在我的圖表中不顯示這些值,但使用線圖時,連接仍然會下降到這一點。我想要一個由線組成的圖表,而不是散點圖。在繪製直線時忽略負值並在MATLAB中使用繪圖函數時僅連接正值有一種簡單的方法嗎?如何忽略使用matlab繪製線條圖時負值的值?

我寫了一個小例子程序,其行爲相似,但我使用的方式似乎有點「太複雜」,我想知道是否有更簡單的方法來實現此目的。它工作正常,因爲我把值設置爲NaN,現在xy值是相同的數量。但是,刪除或整理矢量中的值將導致不同的值xy值。

我希望修改或標誌什麼的。

x = 2*rand(10) - rand(10) 
xx = 10:10:100; 

figure; 
for i=1:length(x) 
    for j=1:length(x(i,:)) 
     if x(i,j) < 0 
      x(i,j) = NaN; 
     end 
    end 
end 

plot(xx,x) 

請注意,這只是一個例子,整個代碼會過大,張貼在這裏。

當具有非對應x - 值(使得繪圖功能只是使用1,2,3...等用於對應的y值)這可以通過使用

plot(x(x>0)) 

在這種情況下可以實現,相應的值是不同的,在真實的代碼中他們是測量數據,在這裏我簡單地使用第10步來簡化。

x = 2*rand(10) - rand(10) 
xx = 10:10:100; 

plot(xx,x(x>0)) 

上面的代碼將錯誤消息「向量必須是相同的長度」。

+0

你有一個你想要繪製的矢量,它包含你想刪除的負值? –

+0

我不想刪除負數,我希望它們不出現在圖中,以便在使用線圖時線不會連接到此值。 – Kev1n91

+0

我只是想確定我理解正確。你想繪製一個沒有負值的矢量? –

回答

4

這就像使用NaN而不是負值,只是原始矢量根本沒有修改。你可能會注意到這個解決方案是矢量化的。

y = 2*randn(10,1) - randn(10,1); 
figure(); plot(1:numel(y), y./(y<=0)); 
+0

謝謝你的回答!當我執行這個代碼時,我只能得到一個空白的圖,其他人都有同樣的經歷嗎?我正在使用Matlab R2016 b – Kev1n91

+0

@ Kev1n91這是隨機性的東西...只要運行它幾次,直到你得到一些可見的線... –

+0

當然,德哦。但是,該解決方案是否可以解決相應的x值? (請注意,有一個問題的編輯指出了這一點) – Kev1n91

1
a = [50, -1, 10, 5, 8, 22, -1]; 
b = a > 0; 
c = a(b); 

輸出:

c 
[50, 10, 5, 8, 22] 

現在你可以曲線C

[~, s] = size(c); 
xx = 1:1:s; 

你也可以做到這一點的情況下直接保存計算,並修改它。只是繪製它。 plot(x(x>0))

+2

或者如果OP不想修改數據,'plot(x(x> 0))' –

+0

@AnderBiguri,true,但是第一種方法可能對他更清楚。 –

+0

謝謝你的回答,我編輯了我的文章。我有相應的x值,如果我改變它像後顯示的那樣,那麼對y值的x值的數量是關閉的。即使有負值(-1),仍然有相應的值。我需要改變它們並擦除相應的值 – Kev1n91