如何在MATLAB中绘制具有相同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()

+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

我认为这是你在找什么:

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

从你的问题,我认为要绘制一个复式条形图。为此,您必须在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