bar plot with color bar

18 次查看(过去 30 天)
I have x rows and three columns: Region, CO2, and GDP. I want to make a bar plot like below, using CO2 as x axis and Region as y axis, meanwhile, using the value of GDP to fill each bar and also add a color bar. I tried different ways, but I could not figure it out. Anyone could help me? Many thanks~

采纳的回答

Mathieu NOE
Mathieu NOE 2021-1-15
hello
see code example below
all the best
clc
clear all
close all
data = [.142 .156 .191 .251 0.5 0.86 2.2 4 8.3];
uniNames = {'eno','pck','zwf','foo','bar','jhy','vfd','vre','zqs'};
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%% main code %%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
data_min = min(data);
data_max = max(data);
map = colormap('jet');
[mmap,nmap] = size(map);
f = figure(1);
fig_pos = [681 105 683 874];
set(f,'Position',fig_pos);
N = numel(data);
for i=1:N
h = barh(N-i+1, data(i));
if i == 1, hold on, end
% now define col value based on data value (min data value maps to colormap map index 1
% and max data value maps to colormap map last index);
ind = fix(1+(mmap-1)*(data(i)-data_min)/(data_max-data_min));
set(h, 'FaceColor', map(ind,:)) ;
% Display the values as labels at the tips of the bars.
xtips1 = h.YEndPoints + 0.1;
ytips1 = h.XEndPoints;
labels1 = string(h.YData);
text(xtips1,ytips1,labels1,'VerticalAlignment','middle')
end
%
set(gca, 'YTickLabel', '')
ylabetxt = uniNames;
xpos = -max(ylim)/12;
text(repmat(xpos,N,1),1:N, ylabetxt','Rotation',0,'FontSize',15);
xlabel('CO² concentration','FontSize',12)
hcb=colorbar('hor');
hcb.Title.String = "A colorbar title";
% hcb.Title.HorizontalAlignment = "center";
hcb.Title.FontSize = 15;
hcb.Title.Position = [210 -40 0];
  3 个评论
H.Zheng
H.Zheng 2021-1-16
Hi, Mathieu. It works well, thank you so much~

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Colormaps 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by