【问题标题】:Matlab: bar No public property CData existsMatlab:bar没有公共属性CData存在
【发布时间】:2017-11-14 09:07:50
【问题描述】:

Matlab 示例代码无法在 Matlab 2017a (Linux 64bits) 中运行: 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 会删除此功能。

【问题讨论】:

  • CData 是 2017b 的新属性。如果你只想改变一个条的颜色,这里有一些好主意:stackoverflow.com/questions/45568120/…
  • 感谢您的快速回答,在Matlab 2017b之前既没有CData也没有get(barHandle, 'children')的尴尬。

标签: matlab colors matlab-figure


【解决方案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')

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

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

【讨论】:

    【解决方案2】:

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

    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');
    

    【讨论】:

    • 感谢您的快速回复。当然这是一种解决方法,但显然在 Matlab 2017b 之前这是一个非常糟糕的体验。在正常的 Matlab 风格中,应该是 bar([2:4],A(2:4),'FaceColor', [1 0 0; 0 1 0; 0 0 1]);,但这次我真的很失望!!
    • 到底是什么让你失望了?如果您必须发布您的工作并确保它在不同的 matlab 版本上运行,您可以随时进行版本检查...
    • 嗯,我明白了,例如,您可以将您的更改总结为一个非常大的图表的循环。
    • 是的! Matlab 应该始终是一个友好的工具。 :)
    猜你喜欢
    • 2011-10-16
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多