如何在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(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