如何在多个条形图中添加标签或更改某个条形的颜色

时间:2012-05-12 16:58:34

标签: matlab plot

假设我有一个多重条,看起来像那样:

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)

enter image description here

我需要的是在某个特定列上放置一个星形或标签,这符合某些条件。另一种选择是改变该条的颜色。

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

2 个答案:

答案 0 :(得分:1)

问题

您可以使用以下方法获取条形的x和y值(x =水平位置,y =每个条形图的高度):

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

然后您可以使用text来绘制文本标签, 或者甚至只用标记绘制标记符号:

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)

enter image description here

或注释:

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

enter image description here

答案 1 :(得分:0)

我认为你可以通过使用条形函数属性来做那些(对于颜色)。

这一切也取决于你是否了解情节的样子;如果您事先知道我认为您可以使用XTick和XTicklabel标记列。

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