更改Matlab条形图中的条形元素的颜色?

Change the color of bar element in Matlab bar graph?

如何更改条形图中的一个条形元素的颜色?因为似乎我的Matlab版本(2015b)不允许我使用b.LineWidth b.EdgeColor或CData。我的代码如下:

1
2
3
4
5
b = bar(1:30);
b.FaceColor = 'flat';
[bv,bi] = max(1:30);
b(bi).LineWidth = 2;
b(bi).EdgeColor = 'red';

使用b.LineWidth和b.EdgeColor时出现此错误;

类matlab.graphics.GraphicsPlaceholder不存在公共属性LineWidth。 tt中的错误(第5行)

以及使用CData的错误;

1
2
3
4
b = bar(1:30);
b.FaceColor = 'flat';
[bv,bi] = max(1:30);
b.CData(bi) = [0.4,0.4,0.4];

对于类'matlab.graphics.chart.primitive.Bar'没有适当的方法,属性或字段'CData'。


(我今天刚学到新东西!)

似乎bar具有两种主要的操作模式,产生不同的手柄图形对象类型。 style输入参数选择操作模式:

  • bar(...,'grouped')bar(...,'stacked')产生一个bar对象。请注意,grouped是默认样式。

  • bar(...,'hist')bar(...,'histc')产生一个Patch对象。

文档没有指定hist模式产生不同的对象类型。在R2015b中存在这些相同的选项,我假设输出类型与我的MATLAB版本(R2017a)相同。

第一种模式产生的bar对象没有CData属性。有一个FaceColorEdgeColor属性。有关更多信息,请参见bar属性文档。但是请注意,这是单个对象,因此您无法索引到句柄并设置单个条的属性。该属性可同时控制所有条形:

1
2
3
4
b = bar(1:30);
b.FaceColor = 'flat';
b.LineWidth = 2;
b.EdgeColor = 'red';

XDataYData属性是例外,它们每小节都有一个值。

第二种模式产生的Patch对象确实具有CData属性。它的操作有点复杂,因为Patch具有每个顶点和每个边的坐标。但是CData属性可以根据需要以不同的方式设置。设置为N x1数组(具有N条数),它为每个条提供了进入颜色映射的索引(但另请参见axis Clim属性以了解该索引的解释方式)。设置为N x1x3数组,它为每个条提供RGB三元组。有关更多信息,请参见Patch属性文档。这是一个示例:

1
2
3
4
5
6
7
b = bar(1:30,'hist');
b.FaceColor = 'flat';
b.LineWidth = 2;
b.EdgeColor = 'red';
cols = zeros(30,1,3)+0.5;
cols(5,1,:) = [1,0,0];
b.CData = cols;

[在此答案中向gnovice致谢。]