How to match colorbar and countourf plot manually?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Ankitkumar Patel
el 6 de Jul. de 2023
Comentada: DGM
el 7 de Jul. de 2023
clear all;
close all;
x=1:10;x=double(x)
y=x';y=double(y)
z=repmat(x,10,1)
maxColorLimit=12
minColorLimit=0
l=maxColorLimit:-1:minColorLimit
npoints=floor(length(l))
levels=linspace(maxColorLimit,minColorLimit,npoints)
s1=contourf(x,y,z,levels)
c1=colorbar
colormap(c1,'Parula(11)')
c1.Ticks=flip(maxColorLimit:-1:minColorLimit);
I want color barto match exactly with the countour plot. I want colorbar and plot to look like below. In short 0 to 1, 10 to 12 colorbar colors also should be out of it. What am i doing wring here?
0 comentarios
Respuesta aceptada
DGM
el 6 de Jul. de 2023
Set your caxis()/clim() values. Set your colormap length according to the number of discrete levels you actually have.
x = 1:10;
y = x';
z = repmat(x,10,1);
% this only sets the mapping and colorbar
colorbarrange = [0 12]; % assumed to be integer values
levels = colorbarrange(1):colorbarrange(2);
maplength = diff(colorbarrange);
% plot things
s1 = contourf(x,y,z,levels);
c1 = colorbar;
colormap(parula(maplength))
caxis(colorbarrange)
% if you really want to make sure every tick is labeled
xticks(gca,ceil(min(x(:))):floor(max(x(:))));
c1.Ticks = levels;
3 comentarios
DGM
el 7 de Jul. de 2023
I write around caxis, since I still run R2019b; clim() wasn't an option until R2022a.
Más respuestas (1)
Angelo Yeo
el 6 de Jul. de 2023
The contourf shows the isolevel of the height z and tries to fill the gaps between contour lines. Same color means the same height. Please take a look at the following visualization.
x=1:10;
y=x';
z=repmat(x,10,1);
ax = gca;
[M, c] = contourf(x,y,z, "ShowText", true);
c1=colorbar;
colormap(parula)
As you can see the rightmost color strip tries to fill the place where the value is assumed to be "9". In order to get what you want, I think you can use imagesc.
imagesc(x, y, z);
c1=colorbar;
colormap(parula)
Note how x and y ticks are different from each other.
2 comentarios
Angelo Yeo
el 6 de Jul. de 2023
Okay. I explained why you get unexpected behavior. Then you can try this to work around your issue. But note that this is not a robut solution for your problem.
x=1:10;
y=x';
z=repmat(x,10,1);
ax = gca;
[M, c] = contourf(x,y,z);
c1=colorbar;
colormap(c1,'Parula(11)')
c1.Ticks = linspace(1, 10, 12);
c1.TickLabels = string(1:12);
Ver también
Categorías
Más información sobre Colormaps en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!