Matlab:bar没有公共财产CData存在

时间:2017-11-14 09:07:50

标签: matlab colors matlab-figure

Matlab示例代码无法在Matlab 2017a(Linux 64位)中运行: https://cn.mathworks.com/help/matlab/ref/bar.html

b = bar(rand(10,1));
b.FaceColor = 'flat';
b.CData(2,:) = [.5 0 .5];

它无法为特定条形图着色并发出警告:

  

类matlab.graphics.chart.primitive.Bar没有公共属性CData。

我不知道它仅仅是Matlab 2017b的特定功能吗?

此代码仅用于为特定条形图着色。在Matlab 2012a中,可以通过以下方式轻松完成:

bh=bar(MyStem); h=get(bh, 'children');
shading flat;  set(h,'FaceVertexCData',MyColor);

我无法理解为什么Matlab 2017会删除此功能。

2 个答案:

答案 0 :(得分:1)

关于CData属性,我已在评论中写道。 无论如何,我认为另一种解决方法可能比建议的更简单,可以是:

x=rand(1,10);
b=bar([x;zeros(1,length(x))]);
xlim([0.5 1.5])
set(b,'FaceColor','r')
set(b(2),'FaceColor','b')

enter image description here

如果您想在常规条形图中对条形编号,可以添加:

set(gca,'XTick',0.5+[b.XOffset])
set(gca,'XTicklabels',1:length(x))

enter image description here

答案 1 :(得分:0)

你可以像这样实现你想要的东西:

b = bar([rand(1,3);nan(1,3)],'b');
b(2).FaceColor = 'r';

您也可以通过使用不同的值多次调用bar函数来实现此目的(这有时可能需要使用):

A = [1,2,3,4,1,3,2];

bar([1],A(1),'FaceColor','r');
bar([2:4],A(2:4),'FaceColor','g');
bar([5:7],A(5:7),'FaceColor','b');