
How to change the color of individual bars in a bar chart?
    132 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    the cyclist
      
      
 el 31 de Oct. de 2016
  
    
    
    
    
    Editada: Scott MacKenzie
      
 el 18 de Abr. de 2021
            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.
0 comentarios
Respuesta aceptada
  Image Analyst
      
      
 el 1 de Nov. de 2016
        
      Editada: Image Analyst
      
      
 el 1 de Nov. de 2016
  
      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.
0 comentarios
Más respuestas (4)
  Scott MacKenzie
      
 el 18 de Abr. de 2021
        
      Editada: Scott MacKenzie
      
 el 18 de Abr. de 2021
  
      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;

0 comentarios
  Dr. Murtaza Ali Khan
      
 el 16 de Mzo. de 2019
        
      Editada: Dr. Murtaza Ali Khan
      
 el 16 de Mzo. de 2019
  
      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

0 comentarios
  Sean de Wolski
      
      
 el 31 de Oct. de 2016
        Why not just make a second bar?
y = rand(1,3);
hb = bar(y);
hold on
hbr = bar(2,y(2),'r');
2 comentarios
  Sean de Wolski
      
      
 el 1 de Nov. de 2016
				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.
Ver también
Categorías
				Más información sobre Line Plots en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




