1

私のデータが以下のように見える場合:

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

Matlabでバー文字としてプロットする方法を教えてください。私は単純に bar(X, Y) を使用しているため、XData に重複した値を含めることはできないと言われています。理想的な状況は、同じ X 位置に 2 つの Y 値があることです。どうもありがとう!!

4

4 に答える 4

1

あなたの質問から、クラスター化された棒グラフをプロットしたいと思います。これには、MATLAB で行列を使用する必要があります。が行列であると言うと、 のすべての列がbar(A)データ系列として取得され、自然数に対してクラスターでプロットされます。したがって、行データとが与えられた場合、次のことを行う必要があります。AAXY

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

データの出力は次のとおりです (X 青、Y 赤)。MATLAB クラスター棒グラフ

于 2012-03-31T21:18:36.833 に答える
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

1 つあたり 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 に答える