Bar plot with bars in different colors

7 ビュー (過去 30 日間)
Raffael
Raffael 2013 年 1 月 16 日
編集済み: Dr. Murtaza Ali Khan 2019 年 3 月 16 日
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)

採用された回答

Thorsten
Thorsten 2013 年 1 月 16 日
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)

その他の回答 (5 件)

Hello kity
Hello kity 2013 年 1 月 18 日
編集済み: Hello kity 2013 年 1 月 18 日
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 件のコメント
Iyk
Iyk 2013 年 4 月 17 日
AWESOME!!!!!!!!1

サインインしてコメントする。


Luke
Luke 2017 年 7 月 6 日
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 件のコメント
Zara Khan
Zara Khan 2018 年 12 月 27 日
This is the most easiest way that we can do. Thanks a ton.

サインインしてコメントする。


Dr. Murtaza Ali Khan
Dr. Murtaza Ali Khan 2019 年 3 月 16 日
編集済み: Dr. Murtaza Ali Khan 2019 年 3 月 16 日
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 2013 年 1 月 17 日
Exactly what I looked for.
Thank you so much you made my day...
  1 件のコメント
Thorsten
Thorsten 2013 年 1 月 18 日
Cool. My pleasure. Please just accept my answer to close the case :-)

サインインしてコメントする。


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

カテゴリ

Help Center および File ExchangeBar Plots についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by