在 MATLAB 中编辑单个条形颜色

在 MATLAB 中编辑单个条形颜色

我正在用 MATLAB 编写示例代码来显示某家企业在一定时间内的利润。到目前为止,我已经相对轻松地绘制了以下图表。

time = {'4 weeks','12 weeks','24 weeks','27 weeks'};

profit= [-4.9,-4.75,-2.49,4.5];

g=bar(profit)

set(gca,'XTick',1:4,'XTickLabel',x)

但是,我希望负值显示红色,正值显示绿色。我尝试使用

set(g(1),'facecolor','r')

看看我是否可以手动执行此操作,因为我的 x 值非常小,手动执行不会有问题。但是,我不断收到错误消息,说设置 g=bar(profit) 不合适。设置它的最佳方法是什么?我知道设置 for 循环可能会有所帮助,如果 time(n) < 1 -> red 和 time(n) > 1 -> green 的值,但我似乎无法用语法理解它。任何帮助都非常感谢。

答案1

为了简化它,你可以分开正值和负值。

time = {'4 weeks','12 weeks','24 weeks','27 weeks'};

profit= [-4.9,-4.75,-2.49,4.5];

profit_pos = profit.*(profit>0); % positive profit
profit_neg = profit.*(profit<=0); % negative profit

figure
g=bar(profit_pos,'b'); % plots positive in blue
hold on
bar(profit_neg,'r') % plots negative in red
set(gca,'XTick',1:4,'XTickLabel',x)

profit_posprofit_neg两个新变量。逻辑数组的元素乘法会得到两个变量中的正值和负值。这也适用于任意大小的数组,并且不需要 for 循环。

相关内容