Bar plot with bars in different colors

3 Ansichten (letzte 30 Tage)
Raffael
Raffael am 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)

Akzeptierte Antwort

Thorsten
Thorsten am 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)

Weitere Antworten (5)

Hello kity
Hello kity am 18 Jan. 2013
Bearbeitet: Hello kity am 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));

Luke
Luke am 6 Jul. 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 Kommentar
Zara Khan
Zara Khan am 27 Dez. 2018
This is the most easiest way that we can do. Thanks a ton.

Melden Sie sich an, um zu kommentieren.


Dr. Murtaza Ali Khan
Dr. Murtaza Ali Khan am 16 Mär. 2019
Bearbeitet: Dr. Murtaza Ali Khan am 16 Mär. 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 am 17 Jan. 2013
Exactly what I looked for.
Thank you so much you made my day...
  1 Kommentar
Thorsten
Thorsten am 18 Jan. 2013
Cool. My pleasure. Please just accept my answer to close the case :-)

Melden Sie sich an, um zu kommentieren.


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

Kategorien

Mehr zu Modeling finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by