Custom colored bar graph for a vector
1 view (last 30 days)
Show older comments
Sowmya MR
on 29 Mar 2016
Commented: Chad Greene
on 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 Comments
Accepted Answer
Azzi Abdelmalek
on 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 Comments
Chad Greene
on 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
on 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
More Answers (1)
Chad Greene
on 29 Mar 2016
Edited: Chad Greene
on 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 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!