Bar plot with bars in different colors

5 vues (au cours des 30 derniers jours)
Raffael
Raffael le 16 Jan 2013
Hi I have the common problem. I have to plot a bar chart with sorted medians for enzymes and the enzymes shall be colored in blue or red depending on their reversibility.
Here is the data:
data = [.142 31 1;.156 7 1;.191 2 0;.251 6 0]
%First column is the sorted value
%Second column is the index for the YTickLabel
%Third column is the reaction direction
% Data(1,3) = 1 -> bar in red
% Data(1,3) = 0 -> bar in blue
uniNames = {'eno','pck','zwf','...'};
%This was the original script....
h = hist(data(1:end,1))
xlabetxt = uniNames(data(:,2));
ylim([0 .5])
text(1:length(xlabetxt),repmat(-max(ylim)/50,length(xlabetxt),1),xlabetxt','horizontalalignment','right','Rotation',90,'FontSize',15)
text
text(.55,77.5,'A','FontSize',15)
ylabel('median log2 fold change','FontSize',15)

Réponse acceptée

Thorsten
Thorsten le 16 Jan 2013
data = [.142 3 1;.156 5 1;.191 2 0;.251 4 0];
%First column is the sorted value
%Second column is the index for the YTickLabel
%Third column is the reaction direction
% Data(1,3) = 1 -> bar in red
% Data(1,3) = 0 -> bar in blue
uniNames = {'eno','pck','zwf','foo' 'bar'};
%This was the original script....
H = data(:, 1);
N = numel(H);
for i=1:N
h = bar(i, H(i));
if i == 1, hold on, end
if data(i, 3) == 1
col = 'r';
else
col = 'b';
end
set(h, 'FaceColor', col)
end
set(gca, 'XTickLabel', '')
xlabetxt = uniNames(data(:,2));
ylim([0 .5]); ypos = -max(ylim)/50;
text(1:N,repmat(ypos,N,1), ...
xlabetxt','horizontalalignment','right','Rotation',90,'FontSize',15)
text(.55,77.5,'A','FontSize',15)
ylabel('median log2 fold change','FontSize',15)

Plus de réponses (5)

Hello kity
Hello kity le 18 Jan 2013
Modifié(e) : Hello kity le 18 Jan 2013
you can also manually select bar and color:
bar(1, Data, 'colorcode')
hold on
bar(2, Data, 'colorcode') , bar (3, Data, 'colorcode')
that is what Thorsten does here:
h = bar(i, H(i));
  1 commentaire
Iyk
Iyk le 17 Avr 2013
AWESOME!!!!!!!!1

Connectez-vous pour commenter.


Luke
Luke le 6 Juil 2017
If you want all your data to be displayed in different colors, an easy way to do this is:
bar(diag(data_vector),'stacked')
  1 commentaire
Zara Khan
Zara Khan le 27 Déc 2018
This is the most easiest way that we can do. Thanks a ton.

Connectez-vous pour commenter.


Dr. Murtaza Ali Khan
Dr. Murtaza Ali Khan le 16 Mar 2019
Modifié(e) : Dr. Murtaza Ali Khan le 16 Mar 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

Raffael
Raffael le 17 Jan 2013
Exactly what I looked for.
Thank you so much you made my day...
  1 commentaire
Thorsten
Thorsten le 18 Jan 2013
Cool. My pleasure. Please just accept my answer to close the case :-)

Connectez-vous pour commenter.


SUDHEEP
SUDHEEP le 30 Oct 2013
try this > a=2; >> b=4; >> bar(a) >> hold on >> bar(2,b,'r') >> axis([0 5 0 6])

Catégories

En savoir plus sur Modeling dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by