1

次のような複数のバーがあるとします。

aa = repmat([1 2 10 5 15 3], 5,1)
aa =

     1     2    10     5    15     3
     1     2    10     5    15     3
     1     2    10     5    15     3
     1     2    10     5    15     3
     1     2    10     5    15     3

bar(aa)

ここに画像の説明を入力

必要なのは、特定の列に星またはラベルを付けることです。これは、いくつかの条件を満たすものです。別のオプションは、そのバーの色を変更することです。

各列の座標を取得できれば、プロットを使用できます。または、どうにかしてエラーバーを変更できますか? アドバイスをありがとう。

4

2 に答える 2

1

問題

以下を使用して、バーの x 値と y 値 (x = 水平位置、y = 各バーの高さ) を取得できます。

hb=bar(aa);
x=cell2mat(get(hb,'Xdata'));
y=cell2mat(get(hb,'Ydata'));

これを使用して、 textlabel をtextでプロットしたり、単に plot でマーク記号をプロットしたりできます。

plot(x,y,'*',Markersize',12)

残念ながら、これは一連のデータが 1 つしかない場合にのみ正しく機能します。これは、Xdata に一連のインデックス (1、2、3 など) が含まれているためです。複数のシリーズの場合、matlab はそのインデックスの周りに棒を広げますが、Xdata 値はすべて同じです (プロットにもかかわらず、まったく同じ位置にプロットされていません)。

解決

'hist'オプションをバー プロットに追加します。

hb=bar(aa,'hist')

これにより、バーシリーズではなくパッチが作成されます。

x=cell2mat(get(hb,'Xdata'));
y=cell2mat(get(hb,'Ydata'));

これらのパッチの (実際の) コーナーが含まれるようになりました。次のように x-center を抽出します。

xcenter = 0.5*(x(2:4:end,:)+x(3:4:end,:));

高さは、パッチの上隅の 1 つを使用して取得できます。

ytop = y(2:4:end,:);

これで、プロットに使用できます。

idx_mark = 3;
plot(xcenter(idx_mark ,:),ytop(idx_mark ,:),'*','Markersize',12)

ここに画像の説明を入力

または注釈の場合:

text(xcenter(idx_mark ,2),ytop(idx_mark ,2),'MARKED',...
    'HorizontalAlignment','center', ...
    'VerticalAlignment','bottom' )

ここに画像の説明を入力

于 2012-05-12T18:55:40.093 に答える
0

バー関数のプロパティを少しいじって(色について)できることはあると思います。

また、プロットがどのように見えるかを多かれ少なかれ知っているかどうかにも依存します。事前に知っていれば、XTick と XTicklabel を使用して列にラベルを付けることができると思います。

http://www.mathworks.nl/help/techdoc/ref/bar.html

于 2012-05-12T17:52:06.730 に答える