How to set common colorbar for multiplots?

Hi all,
I am using subplots to plot multiple contour plots in a single figure using for loop and using colorbar with 'Position' but it doesn't give the common values for all the plots. I have tried different solution which was given to other Matlab users but none worked.
fig=figure(1)
clf
for i=1:24
subplot(6,4,i)
contourf(x,y,z)
end
h=axes(fig,'visible','off');
h.Title.Visible='on';
h.XLabel.Visible='on';
h.YLabel.Visible='on';
ylabel(h,'yaxis','FontWeight','bold');
xlabel(h,'xaxis','FontWeight','bold');
title(h,'title');
colormap(jet)
c=colorbar;
c.Position = [0.93 0.168 0.022 0.7];
Can you help me with this problem?
Thanks in advance!

 Akzeptierte Antwort

Robert U
Robert U am 1 Sep. 2021

10 Stimmen

Hi UTKARSH VERMA,
have a look at caxis():
[x, y] = meshgrid(0:0.1:1,0:0.1:1);
z = rand(11,11,24);
minColorLimit = min(min(min(z))); % determine colorbar limits from data
maxColorLimit = 24*max(max(max(z)));
fig=figure(1);
for i=1:24
sph{i} = subplot(6,4,i,'Parent',fig);
contourf(sph{i},x,y,i.*z(:,:,i)) % changes due to illustration purposes
caxis(sph{i},[minColorLimit,maxColorLimit]); % set colorbar limits
end
h = axes(fig,'visible','off');
h.Title.Visible = 'on';
h.XLabel.Visible = 'on';
h.YLabel.Visible = 'on';
ylabel(h,'yaxis','FontWeight','bold');
xlabel(h,'xaxis','FontWeight','bold');
title(h,'title');
c = colorbar(h,'Position',[0.93 0.168 0.022 0.7]); % attach colorbar to h
colormap(c,'jet')
caxis(h,[minColorLimit,maxColorLimit]); % set colorbar limits
Kind regards,
Robert

7 Kommentare

UTKARSH VERMA
UTKARSH VERMA am 1 Sep. 2021
Thanks Robert!!
It's working perfectly.
Arnav Gupta
Arnav Gupta am 1 Jul. 2022
Hey robert I executed this code but noticed that once a single colorbar comes for all subplots no matter how much i change its limits , there is no change in the subplots. Is it becuase the subplots limits are already specified in for loop and outer colorbar limits has no relation with these subplots??
Robert U
Robert U am 23 Aug. 2022
Hi Arnav Gupta,
exactly. The created colorbar is an individual object on the figure and will not change no matter what you do with you subplots. In order to change that you would have to add a listener to the colorbar that will recalculate on colormap changes within the subplots. That's far more work than recalculating the whole figure and adjust the colorbar limits.
Kind regards,
Robert
Ashfaq Ahmed
Ashfaq Ahmed am 15 Mai 2023
How can I remove the xtics and yticks? @Robert U
I am writing this code -
%load NBayTEMPdetmnth.mat
clf;
fig=figure(1);
t = tiledlayout(4,3); t.TileSpacing = 'compact';
for i = 1:12
nexttile
[~, hContour]=contourf(flip(NBayTEMPdetmnth(:,:,i)),25,'-','linewidth',0.5);
hold on;
end
h = axes(fig,'visible','off');
h.Title.Visible = 'off';
h.XLabel.Visible = 'off';
h.YLabel.Visible = 'off';
c = colorbar(h,'Position',[0.93 0.168 0.022 0.7]); % attach colorbar to h
colormap(c,'jet')
caxis(h,[-5 20]); % set colorbar limits
Try this:
NBayTEMPdetmnth = rand([256,256,12]);
clf;
fig=figure(1);
t = tiledlayout(4,3); t.TileSpacing = 'compact';
for i = 1:12
ah = nexttile;
[~, hContour]=contourf(ah,flip(NBayTEMPdetmnth(:,:,i)),25,'Linestyle','none','linewidth',0.5);
ah.XTick = [];
ah.YTick = [];
end
h = axes(fig,'visible','off');
h.Title.Visible = 'off';
h.XLabel.Visible = 'off';
h.YLabel.Visible = 'off';
c = colorbar(h,'Position',[0.93 0.168 0.022 0.7]); % attach colorbar to h
colormap(c,'jet')
caxis(h,[-5 20]); % set colorbar limits
Kind regards,
Robert
Shuchi
Shuchi am 13 Jun. 2023
Thanks for the code.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Adam Danz
Adam Danz am 20 Jun. 2023
Bearbeitet: Adam Danz am 20 Jun. 2023
This is easy with tiledlayout (MATLAB R2020b or later)
tcl = tiledlayout(3,4);
for i = 1:prod(tcl.GridSize)
nexttile()
[X,Y,Z] = peaks(2+i);
contourf(X,Y,Z)
clim([-7,6]) % Important! Set the same color limits
end
cb = colorbar();
cb.Layout.Tile = 'east'; % Assign colorbar location

2 Kommentare

Diana Grisolia
Diana Grisolia am 11 Apr. 2024
Thnks! It worked perfectly!!
Amirmohammad
Amirmohammad am 23 Jan. 2026
Perfect solution for me too! Thanks!

Melden Sie sich an, um zu kommentieren.

Produkte

Version

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by