フィルターのクリア

How to match colorbar and countourf plot manually?

2 ビュー (過去 30 日間)
Ankitkumar Patel
Ankitkumar Patel 2023 年 7 月 6 日
コメント済み: DGM 2023 年 7 月 7 日
clear all;
close all;
x=1:10;x=double(x)
x = 1×10
1 2 3 4 5 6 7 8 9 10
y=x';y=double(y)
y = 10×1
1 2 3 4 5 6 7 8 9 10
z=repmat(x,10,1)
z = 10×10
1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10
maxColorLimit=12
maxColorLimit = 12
minColorLimit=0
minColorLimit = 0
l=maxColorLimit:-1:minColorLimit
l = 1×13
12 11 10 9 8 7 6 5 4 3 2 1 0
npoints=floor(length(l))
npoints = 13
levels=linspace(maxColorLimit,minColorLimit,npoints)
levels = 1×13
12 11 10 9 8 7 6 5 4 3 2 1 0
s1=contourf(x,y,z,levels)
s1 = 2×99
2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 10 10 9 8 7 6 5 4 3 2 1 10 10 9 8 7 6 5 4 3 2 1 10 10 9 8 7 6 5 4
c1=colorbar
c1 =
ColorBar with properties: Location: 'eastoutside' Limits: [1 10] FontSize: 9 Position: [0.8302 0.1109 0.0381 0.8152] Units: 'normalized' Show all properties
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?

採用された回答

DGM
DGM 2023 年 7 月 6 日
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 件のコメント
Ankitkumar Patel
Ankitkumar Patel 2023 年 7 月 7 日
I also asked one more question: Kind of next step of this one
Check it here: https://de.mathworks.com/matlabcentral/answers/1992888-only-one-colorbar-for-subplots-while-plotting-in-a-for-loop
DGM
DGM 2023 年 7 月 7 日
I write around caxis, since I still run R2019b; clim() wasn't an option until R2022a.

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

その他の回答 (1 件)

Angelo Yeo
Angelo Yeo 2023 年 7 月 6 日
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 件のコメント
Ankitkumar Patel
Ankitkumar Patel 2023 年 7 月 6 日
編集済み: Ankitkumar Patel 2023 年 7 月 6 日
Thank you for your answer but want to do it opposite of it. I want colorbar as shown from 1 to 12 in which colorscale for 1 to 10 should match with colorplot.
Angelo Yeo
Angelo Yeo 2023 年 7 月 6 日
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);

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

カテゴリ

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

Community Treasure Hunt

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

Start Hunting!

Translated by