Why is my diverging colormap not centered as expected?

11 ビュー (過去 30 日間)
Austin M. Weber
Austin M. Weber 2024 年 3 月 13 日
編集済み: Austin M. Weber 2024 年 3 月 13 日
I want to plot a heatmap of some data using a diverging colormap from the crameri function (File Exchange). However, the colormap is not centering about the specified pivot value:
load data.mat
figure(1)
h1 = heatmap(data);
vik = crameri('vik','pivot',0);
colormap(gca,vik)
clim(gca,[-1,1])
By setting the pivot value to 0 the colormap should be ordered like this:
What is the issue?
  2 件のコメント
Voss
Voss 2024 年 3 月 13 日
In the future, please refrain from uploading File Exchange files to Answers (because File Exchange requires a MathWorks login to download files but Answers does not). Linking to the relevant File Exchange submission is sufficient. I've removed crameri.m from your question.
Austin M. Weber
Austin M. Weber 2024 年 3 月 13 日
編集済み: Austin M. Weber 2024 年 3 月 13 日
@Voss, That makes sense. I removed the colormap .mat file as well because it was also from the File Exchange submission.

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

採用された回答

DGM
DGM 2024 年 3 月 13 日
編集済み: DGM 2024 年 3 月 13 日
The problem is caused by when you call crameri(). Remember that a color table is just an ordered progression of color tuples. By itself, it doesn't carry any information about the values that it's being used to represent. So the pivot value alone is meaningless. It needs to be taken in relationship to some other limiting values in order to describe where white is with respect to the ends of the table. When you explicitly specify a pivot value, it's taken in relation to the current clim values at that moment. Since the default values for clim (i.e. on a fresh figure) are [0 1], that makes your colortable asymmetric.
If you want your table to be centered and diverging, you can either explicitly center your clim values on the intended pivot prior to calling crameri()
load data.mat
h1 = heatmap(data);
caxis(gca,[-1,1])
vik = crameri('vik','pivot',0);
colormap(gca,vik)
... or alternatively, you can simply not specify the pivot value. By default, crameri() will produce the table centered regardless of whatever the current clim values are.
load data.mat
h1 = heatmap(data);
vik = crameri('vik');
colormap(gca,vik)
caxis(gca,[-1,1])
  1 件のコメント
Austin M. Weber
Austin M. Weber 2024 年 3 月 13 日
@DGM, Thank you for the explanation. Makes sense, and the colormap is now working as expected!

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

その他の回答 (0 件)

カテゴリ

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