私のデータが以下のように見える場合:
X = [ 1 2 2 3 4 5 5]
Y = [10 9 -5 11 12 -3 7]
Matlabでバー文字としてプロットする方法を教えてください。私は単純に bar(X, Y) を使用しているため、XData に重複した値を含めることはできないと言われています。理想的な状況は、同じ X 位置に 2 つの Y 値があることです。どうもありがとう!!
私のデータが以下のように見える場合:
X = [ 1 2 2 3 4 5 5]
Y = [10 9 -5 11 12 -3 7]
Matlabでバー文字としてプロットする方法を教えてください。私は単純に bar(X, Y) を使用しているため、XData に重複した値を含めることはできないと言われています。理想的な状況は、同じ X 位置に 2 つの Y 値があることです。どうもありがとう!!
あなたの質問から、クラスター化された棒グラフをプロットしたいと思います。これには、MATLAB で行列を使用する必要があります。が行列であると言うと、 のすべての列がbar(A)
データ系列として取得され、自然数に対してクラスターでプロットされます。したがって、行データとが与えられた場合、次のことを行う必要があります。A
A
X
Y
A=[X;Y]'; %note the single quote for transpose
bar(A)
データの出力は次のとおりです (X 青、Y 赤)。
私はこれがあなたが探しているものだと思います:
barh(Y,X), xlabel('X'), ylabel('Y')
データを 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