Custom colored bar graph for a vector
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Sowmya MR
le 29 Mar 2016
Commenté : Chad Greene
le 29 Mar 2016
Hi, I have a vector x=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] and corresponding y=[1 2 3 1 1 1 2 3 3 1 3 3 3 2 3]. I should generate a bar plot {bar(x,y)} such that bar corresponding to different numbers are in different colors. For example: Bar color corresponding to 1's should be red, Bar color for all 2's should be yellow and so on....Can someone please help with this?
0 commentaires
Réponse acceptée
Azzi Abdelmalek
le 29 Mar 2016
x=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
y=[1 2 3 1 1 1 2 3 3 1 3 3 3 2 3]
cl='rgyb'
for k=1:numel(x)
bar(x(k),y(k),'FaceColor' ,cl(y(k)))
hold on
end
3 commentaires
Chad Greene
le 29 Mar 2016
Nice! Or a more generalized form in case y = y+5;
x=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] ;
y=[1 2 3 1 1 1 2 3 3 1 3 3 3 2 3];
uniquey = unique(y);
Ncolors = length(uniquey);
hold on
cmap = jet(Ncolors);
for k = 1:length(x)
bar(x(k),y(y(k)),'facecolor',cmap(uniquey==y(k),:))
end
Chad Greene
le 29 Mar 2016
Sowmya- To get the text labels put this at the end:
text(x,y,num2str(y'),'horiz','center','vert','bottom')
box off
Plus de réponses (1)
Chad Greene
le 29 Mar 2016
Modifié(e) : Chad Greene
le 29 Mar 2016
You can set the facecolor of bar(s) when you call the bar function. Below I'm defining the rgb values of 15 colors with jet. The display is colorful, but perhaps not the most elegant design for data display. Fewer colors is usually better.
x=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] ;
y=[1 2 3 1 1 1 2 3 3 1 3 3 3 2 3];
hold on
cmap = jet(length(x));
for k = 1:length(x)
bar(x(x==x(k)),y(x==x(k)),'facecolor',cmap(k,:))
end
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/173865/image.png)
0 commentaires
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!