【问题标题】:Change the color of bar element in Matlab bar graph?更改 Matlab 条形图中条形元素的颜色?
【发布时间】:2018-10-28 03:48:53
【问题描述】:

如何更改条形图中某个条形元素的颜色?因为似乎我的 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];

类“matlab.graphics.chart.primitive.Bar”没有合适的方法、属性或字段“CData”。

【问题讨论】:

  • 您确定没有LineWidthEdgeColorThe documentation for R2015b 另有说明。这也都在9th example in the R2015b documentation 中明确解决。
  • 是的,当然。这是错误;类“matlab.graphics.chart.primitive.Bar”没有合适的方法、属性或字段“CData”。 tt 中的错误(第 5 行) b.CData(bi) = [0.4,0.4,0.4];
  • 也适用于其他人;类 matlab.graphics.GraphicsPlaceholder 不存在公共属性 LineWidth。 tt 中的错误(第 5 行)b(bi).LineWidth = 2;
  • matlab.graphics.GraphicsPlaceholder 表示您没有正确处理 bar 的输出。请edit您的帖子包含minimal reproducible example
  • b(bi).LineWidth = 2; 不在您提供的代码中。再次,请阅读minimal reproducible example。如果您不这样做,我们将无法帮助您。

标签: matlab graph colors


【解决方案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 属性可以根据您的需要以不同的方式设置。设置为 Nx1 数组(N 柱的数量)它为每个柱的颜色映射提供一个索引(但另请参阅轴的Clim 属性以了解如何解释该索引)。设置为Nx1x3 数组,它为每个条提供一个 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.]

【讨论】:

  • 非常感谢@Cris Luengo。我想知道如何将 FaceColor 设置为 e.x。蓝色?
  • 如果你想要它们都是相同的颜色,只需执行b.FaceColor='blue',如果你想要它们都是蓝色的,除了一个,使用hist模式,并设置cols=zeros(30,1,3); cols(:,1,3)=1; cols(5,1,:)=[1,0,0]; b.CData=cols;或类似的东西
猜你喜欢
  • 2011-08-03
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 2012-10-18
  • 2013-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多