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)

在此处输入图像描述

我需要的是在满足某些条件的某些列上放一个星号或标签。另一种选择是更改该条的颜色。

如果我能得到每列的坐标,我可以使用 plot. 或者也许我可以以某种方式修改错误栏?感谢您的任何建议。

4

2 回答 2

1

问题

您可以使用以下方法获取条形图的 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' )

在此处输入图像描述

于 2012-05-12T18:55:40.093 回答
0

我认为你可以通过使用 bar 函数属性来做到这一点(对于颜色)。

这也完全取决于你是否或多或少地知道你的情节会是什么样子;如果您事先知道,我认为您可以使用 XTick 和 XTicklabel 来标记您的列。

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

于 2012-05-12T17:52:06.730 回答