2012-03-31 159 views
1

如果我的數據看起來象下面這樣:如何在MATLAB中繪製具有相同X但不同Y值的圖形?

X = [ 1 2 2 3 4 5 5] 
Y = [10 9 -5 11 12 -3 7] 

誰能告訴我如何繪製它作爲在Matlab酒吧字符?因爲我只是使用bar(X,Y),它表示XData不能有重複的值。理想的情況是在同一個X位置有兩個Y值。非常感謝!!

回答

0

你有你的數據拆分爲2系列:正面和負面的價值y。然後你可以在同一個圖上繪製兩個圖。

請注意,因爲bar函數使用條的相對寬度,所以它取決於數據序列中x值之間的最小距離。如果這兩個數據序列中的數字不同,則必須更正條寬。

ipos = y>=0; 
ineg = y<0; 
dpos = min(diff(sort(x(ipos)))); 
dneg = min(diff(sort(x(ineg)))); 

w = 0.8; 
bar(x(ipos),y(ipos),w); 
hold on 
bar(x(ineg), y(ineg), w*dpos/dneg, 'facecolor','r'); 
hold off 

如果每個x超過2倍的值,你可能想使用另一種方法,通過多次迭代去除唯一值。在這種情況下,某些值可能會重疊,因此首先排序y

xx = x; 
yy = y; 
cla 
hold on 
w = 0.8; 
while ~isempty(xx) 
    [xu, idx] = unique(xx); 
    yu = yy(idx); 
    xx(idx) = []; 
    yy(idx) = []; 
    d = min(diff(sort(xu))); 
    bar(xu,yu,w/d); 
end 
hold off 
clear xx yy xu yu d 
0

改爲使用barh()

+0

感謝您的回覆。然而,barh()給了我同樣的錯誤信息:'XData不能包含重複值.'我所做的是barh(X,Y)... – Kevin 2012-03-31 14:32:05

+0

@Kevin:然後交換參數。 (我假設你想要一個水平條形圖;否則,我不知道如何解釋你有多個相同X值的願望)。 – 2012-03-31 14:37:37

+0

這是一樣的,因爲我的Y在我的實際數據表中有重複的值。 – Kevin 2012-03-31 14:55:59

0

我認爲這是你在找什麼:

barh(Y,X), xlabel('X'), ylabel('Y') 
1

從你的問題,我認爲要繪製一個複式條形圖。爲此,您必須在MATLAB中使用矩陣。當您說bar(A)其中A是一個矩陣時,A的每一列都將被視爲一個數據序列,並將按照自然數字的集羣進行繪製。所以給你的行數據XY,你應該做的:

A=[X;Y]'; %note the single quote for transpose 
bar(A) 

這裏的輸出數據(X藍色,Y紅色):MATLAB clustered bar graph

+0

感謝Abhranil,但實際上我正在尋找的是一些像相同的X值,但有兩個不同的Y值。 (同樣具有兩個不同X值的Y值)。 – Kevin 2012-04-01 02:49:12

+0

好的,現在這不是很清楚。 – 2012-04-01 08:55:04

相關問題