How to change the color of individual bars in a bar chart?

조회 수: 454 (최근 30일)
the cyclist
the cyclist 2016년 10월 31일
편집: Scott MacKenzie 2021년 4월 18일

Make a simple bar chart (and get its handle):

figure
rng default
hb = bar(rand(1,3));

How can I set the colors of those bars now (after I have made the figure)? I want each bar to be a different color.

I am specifically asking about MATLAB R2016b.

I asked a very similar question about MATLAB R2014b earlier, but that method no longer seems to work. (Or I am overlooking something again.

채택된 답변

Image Analyst
Image Analyst 2016년 11월 1일
편집: Image Analyst 2016년 11월 1일
See attached demo.
Sorry - it's basically the same as what Sean did, just fancier and more flexible. You could put a wrapper around it to make it easier to use though.

추가 답변 (4개)

Scott MacKenzie
Scott MacKenzie 2021년 4월 18일
편집: Scott MacKenzie 2021년 4월 18일
Here's a simple solution. Notably, all the bar colors are set in a single statement (provided the new colors are pre-defined in a matrix).
x = 1:3;
y = randi(100,1,3);
clr = [223 145 167;
178 198 65;
134 156 211] / 255;
b = bar(x, y, 'facecolor', 'flat');
b.CData = clr;

Dr. Murtaza Ali Khan
Dr. Murtaza Ali Khan 2019년 3월 16일
편집: Dr. Murtaza Ali Khan 2019년 3월 16일
mydata=rand(1,10)
color= ['r','g','b','k'];
figure, hold on
% % if data is more than colors then colors will be repeated
m = length(color);
for k = 1:length(mydata)
i = mod(k-1,m); %%i is remainder after division of k-1 by m
i = i+1;
h=bar(k,mydata(k));
set(h,'FaceColor',color(i));
end

Sean de Wolski
Sean de Wolski 2016년 10월 31일
Why not just make a second bar?
y = rand(1,3);
hb = bar(y);
hold on
hbr = bar(2,y(2),'r');
  댓글 수: 2
the cyclist
the cyclist 2016년 11월 1일
I appreciate the answer, but ...
Ugh. Let's hope there is a way to do this via the properties of one bar chart, rather using N bar commands for an N-bar chart.
Sean de Wolski
Sean de Wolski 2016년 11월 1일
I don't know of a way to do it using documented properties. You can trick bar into returning a bar array by padding with NaNs but then you need to deal with limits and ticks yourself all while still creating more bars so it's not saving you anything but is adding more headache.
b = bar([rand(1,3);nan(1,3)],'b')
b(2).FaceColor = 'r'
Which is why calling bar a few times is really not the end of the world. It's not like with a line where there could be millions of points so you're going to chew up data to plot duplicate lines. Most figures will only have less than few dozen bars total.
All of this said, I think it's a fair enhancement request to have an option to get back a handle to each bar separately.

댓글을 달려면 로그인하십시오.


Yaser Khojah
Yaser Khojah 2019년 10월 21일
how would you show the legend color here?

카테고리

Help CenterFile Exchange에서 Bar Plots에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by