Effacer les filtres
Effacer les filtres

Custom colored bar graph for a vector

1 vue (au cours des 30 derniers jours)
Sowmya MR
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?

Réponse acceptée

Azzi Abdelmalek
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
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
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

Connectez-vous pour commenter.

Plus de réponses (1)

Chad Greene
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

Community Treasure Hunt

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

Start Hunting!

Translated by