這裏一步一步解釋。
首先考慮下面的例子:
[X,Y,Z1] = peaks;
figure(1)
[~,h1] = contourf(X,Y,Z1,20);
a1 = colorbar;
colormap(jet)
caxis([-6,6])
,這將給你如下情節:
它具有線性數據和線性顏色表。現在我想縮放Z
-數據以獲得非線性,就像你的情況一樣。我選擇了一個簡單的數據平方。
Z2 = get(h1,'ZData');
scalefactor = @(x) sign(x).*x.^2;
Z2 = scalefactor(Z2);
這就是實際的數據。例如,類似於你:
figure(2)
[~,h2] = contourf(X,Y,Z2,20);
a2 = colorbar;
colormap(jet)
caxis([-6^2,6^2])
現在我們有非線性的數據,但仍然是一個線性colormap
和colorbar
。
到目前爲止,所有事情都是爲了生成類似於您的示例數據。
現在實際的答案:
讓您的情節數據:
Z3 = get(h2,'ZData');
,並用關係,你希望知道它的規模或多或少:
descalefactor = @(x) sign(x).*abs(x).^(1/2);
Z3 = descalefactor(Z3);
繪製縮放數據:
figure(3)
[~,h3] = contourf(X,Y,Z3,20);
a3 = colorbar;
colormap(jet)
caxis([-6,6])
得到Y-Ticks
和scale it with the inverse function
,像您的數據:
ticks = get(a3,'YTick');
ticks = scalefactor(ticks);
設置這些inversly縮放彩條刻度:
set(a3,'YTickLabel',ticks)
,你終於得到一個看似線性圖(但你可以只需從以前備份您的非線性數據),並帶有非線性顏色圖和顏色條刻度。
正如預期的那樣,曲線看起來像在第一示例中的相同,但有一個縮放彩條軸線。
如果您沒有任何功能關係,請嘗試獲取一個,例如用曲線擬合工具箱。
也許這有助於:[對數彩條(http://www.mathworks.com/matlabcentral/newsreader/view_thread/152310) – thewaywewalk
你的意思是你想要一個不統一的顏色表? 'colorbar'通常只顯示'colormap'是什麼。我假設你已經試過['colormapeditor'](http://www.mathworks.com/help/matlab/ref/colormapeditor.html)。您應該在文件交換中搜索自定義顏色映射。 – horchler
Sidenote,第一張照片中的條似乎有30以上的值,而第二個彩條只顯示值直到30. –