如果我的數據看起來象下面這樣:如何在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值。非常感謝!!
如果我的數據看起來象下面這樣:如何在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值。非常感謝!!
你有你的數據拆分爲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
改爲使用barh()
。
我認爲這是你在找什麼:
barh(Y,X), xlabel('X'), ylabel('Y')
從你的問題,我認爲要繪製一個複式條形圖。爲此,您必須在MATLAB中使用矩陣。當您說bar(A)
其中A
是一個矩陣時,A
的每一列都將被視爲一個數據序列,並將按照自然數字的集羣進行繪製。所以給你的行數據X
和Y
,你應該做的:
A=[X;Y]'; %note the single quote for transpose
bar(A)
這裏的輸出數據(X藍色,Y紅色):
感謝Abhranil,但實際上我正在尋找的是一些像相同的X值,但有兩個不同的Y值。 (同樣具有兩個不同X值的Y值)。 – Kevin 2012-04-01 02:49:12
好的,現在這不是很清楚。 – 2012-04-01 08:55:04
感謝您的回覆。然而,barh()給了我同樣的錯誤信息:'XData不能包含重複值.'我所做的是barh(X,Y)... – Kevin 2012-03-31 14:32:05
@Kevin:然後交換參數。 (我假設你想要一個水平條形圖;否則,我不知道如何解釋你有多個相同X值的願望)。 – 2012-03-31 14:37:37
這是一樣的,因爲我的Y在我的實際數據表中有重複的值。 – Kevin 2012-03-31 14:55:59