Matlab:bar不存在公共属性CData

Matlab:bar不存在公共属性CData,matlab,colors,matlab-figure,Matlab,Colors,Matlab Figure,Matlab示例代码无法在Matlab 2017a(Linux 64位)中运行: 它不能给特定的条上色,并警告如下: matlab.graphics.chart.primitive.Bar类不存在公共属性CData 我不知道这仅仅是Matlab2017b的一个特定功能 此代码仅用于为特定条上色。在Matlab 2012a中,可以通过以下方式轻松完成: bh=bar(MyStem); h=get(bh, 'children'); shading flat; set(h,'FaceVertexC

Matlab示例代码无法在Matlab 2017a(Linux 64位)中运行:

它不能给特定的条上色,并警告如下:

matlab.graphics.chart.primitive.Bar类不存在公共属性CData

我不知道这仅仅是Matlab2017b的一个特定功能

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

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

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

您可以通过以下方式实现您的目标:

b = bar([rand(1,3);nan(1,3)],'b');
b(2).FaceColor = 'r';
您还可以通过多次使用不同的值调用bar函数来实现这一点(这是一种有时可能需要使用的做法):


关于
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')

如果要按常规条形图对条形图进行编号,可以添加以下内容:

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

CData
是2017b的新财产。如果您只想更改一个条形图的颜色,这里有一些好主意:感谢您的快速回答,在Matlab 2017b之前,既没有CData,也没有
get(barHandle,'children')
。感谢您的快速回复。当然,这是一种变通方法,但显然,在Matlab2017b之前,这是一种非常糟糕的体验。在正常的Matlab样式中,它应该类似于
bar([2:4],a(2:4),'FaceColor',[10;01;01]),但这次我真的很失望!!到底是什么让你失望?如果您必须发布您的工作并确保它在不同的matlab版本上运行,您可以随时进行版本检查…啊,好吧,我理解,您可以将您的更改汇总到一个循环中,例如,非常大的图形。是的!Matlab应该始终是一个友好的工具。:)
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')
set(gca,'XTick',0.5+[b.XOffset])
set(gca,'XTicklabels',1:length(x))