Colouring Bars by 'Y' value

2 ビュー (過去 30 日間)
10B
10B 2016 年 1 月 13 日
コメント済み: Star Strider 2016 年 1 月 14 日
Hello Community,
I am trying to plot a bar chart and to colour the bars according to a rule related to the values for the 'Y' axis. So, if the Y value is a minus figure, the bar should be coloured grey, and if positive, should be coloured black. I have tried the following (and several variations):
% Colouring bars
if y <0;
bar(y,'RGB::Grey');
elseif y >= 0;
bar(y,'RGB::Black');
end
but with no luck. Everything else about the plotting that I am doing works fine.
I'm sure this will be simple for the more experienced, so could anyone suggest a fix to help me please?
Thank you,
10B.

採用された回答

Mike Garrity
Mike Garrity 2016 年 1 月 13 日
I would suggest the approach I described in this blog post. In this case, it would look something like this:
x = 1:18;
y = randn(1,18);
mask = y > 0;
y1 = y;
y1(mask) = nan;
bar(x,y1,'FaceColor','red')
hold on
y2 = y;
y2(~mask) = nan;
bar(x,y2,'FaceColor','green')
  3 件のコメント
10B
10B 2016 年 1 月 14 日
Hello Mike,
Thanks for your informative answer and link to the blog information (hadn't seen that article).
To be fair, I have accepted your answer, but Star Strider's answer helped as well as this gave me the colouring options that I wanted, so I merged the best parts of the two to get the following:
figure('Color',[1 1 1]);
cm = [0.90 0.90 0.90; 0 0 0];
mask = y > 0;
y1 = y;
y1(mask) = nan;
bar(x,y1,'FaceColor',cm(1,:))
hold on
y2 = y;
y2(~mask) = nan;
bar(x,y2,'FaceColor',cm(2,:))
hold off
With only a couple of tweaks to the colouring values 'cm'.
This now does exactly what I want - Thanks!

サインインしてコメントする。

その他の回答 (1 件)

Star Strider
Star Strider 2016 年 1 月 13 日
編集済み: Star Strider 2016 年 1 月 13 日

This seems to work, at least on my test data:

x = 1:10;
y = randi([-9 9], 1, 10);
yp = y>0;                                       % Logial Indices: Positive ‘y’
yn = y<0;                                       % Logial Indices: Negative ‘y’
cm = [0.5 0.5 0.5; 0 0 0];                      % Colour Matrix
figure(1)
bar(x(yn), y(yn), 'FaceColor',cm(1,:))
hold on
bar(x(yp), y(yp), 'FaceColor',cm(2,:))
hold off
set(gca, 'XTick', x)
  2 件のコメント
Star Strider
Star Strider 2016 年 1 月 14 日
My pleasure!
A Vote would be appreciated!

サインインしてコメントする。

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by