问题
您可以使用以下方法获取条形图的 x 和 y 值(x=水平位置,y=每个条形图的高度):
hb=bar(aa);
x=cell2mat(get(hb,'Xdata'));
y=cell2mat(get(hb,'Ydata'));
然后您可以使用它来绘制带有text的 textlabel ,或者甚至只是使用 plot 绘制标记符号:
plot(x,y,'*',Markersize',12)
不幸的是,这仅在您只有一个数据系列时才能正常工作,因为 Xdata 包含系列中的索引(1、2、3 等)。对于多个系列,matlab 将条形分布在该索引周围,但 Xdata 值都是相同的(尽管在图中,它们并未绘制在完全相同的位置)。
解决方案
将选项添加'hist'
到条形图:
hb=bar(aa,'hist')
这会创建补丁而不是 bareries,并且
x=cell2mat(get(hb,'Xdata'));
y=cell2mat(get(hb,'Ydata'));
现在包含这些补丁的(实际)角落。提取 x 中心如下:
xcenter = 0.5*(x(2:4:end,:)+x(3:4:end,:));
高度可通过补丁的上角之一获得:
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' )