【发布时间】:2019-08-20 20:31:36
【问题描述】:
我想在 MATLAB 中更改条形图中的单个条形颜色。我当然可以使用 for 循环来做到这一点,但是否可以不使用 for 循环来做到这一点,比如矢量运算。
这是使用 for 循环的最小示例
distr = [11,12,34,45,9];
totalkeys = numel(distr);
color = parula(totalkeys);
hold on;
for i = 1:totalkeys
bb= bar(i-1, distr(i), 'facecolor', color(i,:),'BarWidth', 1);
end
hold off;
xlim([0 totalkeys-1]);
顺便说一句,我正在使用 MATLAB R2016a。
【问题讨论】:
-
您有什么特别的理由要避免使用 for 循环吗?这段代码是不是太慢了?我怀疑 for 循环会减慢任何图形渲染速度。在基于“循环很慢”(不再正确)进行优化之前,分析您的代码以识别瓶颈,然后优化该位。
-
如果您将
bb = bar(...)更改为bb(i) = bar(...),那么在您的所有代码之后尝试bb(3).FaceColor = [1 0 0];尽管老实说我不确定您为什么反复调用bar。但我对此进行了测试,它在 R2017a 中有效。 -
bar的文档示例包括如何将'FaceColor'属性设置为'flat',通过CData(i,:) = [r g b]调整第i 个条的颜色。但我认为这不适用于您的版本。bb.CData是否存在于您的版本中? -
@CrisLuengo ,我在另一个 for 循环中使用这个条形图,它运行了大约 1000 次,所以这个 for 循环会减慢整个过程。
-
@SecretAgentMan MATLAB R2016a 不存在 CData。我认为它出现在 R2017b 之后
标签: matlab plot bar-chart matlab-figure