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

时间:2018-05-17 19:06:17

标签: matlab graph colors

如何更改条形图中某个条形元素的颜色?因为看起来我的Matlab版本(2015b)并没有让我使用b.LineWidth b.EdgeColor或CData。我的代码如下所示;

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的错误;

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

没有合适的方法,财产或字段' CData' for class' matlab.graphics.chart.primitive.Bar'。

1 个答案:

答案 0 :(得分:1)

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

似乎bartwo main modes of operation,产生不同的句柄图形对象类型。 style输入参数选择操作模式:

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

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

The documentation未指定hist模式生成不同的对象类型。 In R2015b these same options existed,我假设输出类型与我的MATLAB版本(R2017a)相同。

第一种模式生成的Bar对象没有CData属性。有一个FaceColorEdgeColor属性。有关详细信息,请参阅Bar properties documentation。但请注意,这是一个单个对象,因此您无法索引句柄并设置单个条的属性。属性同时控制所有条形:

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

例外是XDataYData属性,每个条有一个值。

第二种模式生成的Patch对象确实具有CData属性。操作起来有点复杂,因为Patch具有每个顶点和每个边的坐标。但CData属性可以根据您的需要以不同方式设置。设置为N x1数组(条形数为N),它为每个条形图的颜色贴图提供索引(但另请参阅轴' Clim属性以了解如何该索引被解释)。设置为N x1x3数组,它为每个条形提供RGB三元组。有关详细信息,请参阅Patch properties documentation。这是一个例子:

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 in this answer。]