問題
以下を使用して、バーの 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' )