bar plot with color bar
16 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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~
0 commentaires
Réponse acceptée
Mathieu NOE
le 15 Jan 2021
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 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Colormaps dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!