1

如果我的数据如下所示:

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

谁能告诉我如何在 Matlab 中将其绘制为条形字符?因为我只是使用 bar(X, Y),所以它表示 XData 不能没有重复值。理想的情况是在同一个X位置,有两个Y值。非常感谢!!

4

4 回答 4

1

根据您的问题,我认为您想绘制一个聚集条形图。为此,您必须在 MATLAB 中使用矩阵。当你说矩阵bar(A)在哪里时A,每一列A都被视为一个数据系列,并将根据自然数绘制成簇。因此,鉴于您的行数据XY,您应该这样做:

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

这是您的数据的输出(X 蓝色,Y 红色):MATLAB 聚类条形图

于 2012-03-31T21:18:36.833 回答
0

改为使用barh()

于 2012-03-31T14:03:46.497 回答
0

我想这就是你要找的:

barh(Y,X), xlabel('X'), ylabel('Y')
于 2012-03-31T20:22:36.217 回答
0

您必须将数据拆分为 2 个系列:对于y. 然后你可以在同一个图上绘制两者。

请注意,由于bar函数使用条形的相对宽度,因此它取决于x数据系列中值之间的最小距离。如果这些数字在 2 个数据系列中不同,则必须更正条形宽度。

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

如果每个值超过 2 个x,则可能需要使用另一种方法通过多次迭代来删除唯一值。在这种情况下,某些值可能会重叠,因此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
于 2012-04-01T07:56:47.007 回答