如何在Matlab绘图中控制colorbar颜色范围?

3

我有以下代码:

[X,Y,Z] = peaks(30);
crange = 1.5;

[maxval dummy] = max(Z(:));
[minval dummy] = min(Z(:));

% green, yellow, red
cmap = [0 1 0; 1 1 0; 1 0 0];  

figure
colormap(cmap); 
surf(X,Y,Z);
caxis([30 55]);
cbh=colorbar;
set(cbh,'Ytick',[30 32 38 55]);

enter image description here

我的目标是设置颜色条的限制,使颜色如下:

  • 从30到32为绿色
  • 从32到38为黄色
  • 从38到55为红色

我认为我应该以某种方式更改CData变量,所以我使用了以下代码行但没有成功:

i = findobj(cbh,'type','image');
set(i,'cdata',[30 32 38]','YData',[30 55]);
1个回答

6
你的定制色条由(32-30 = ) 2 + (38-32 = ) 6 + (55-38 = ) 17 = 25个"单位"颜色组成。因此,一个简单的技巧是将每种颜色复制所需数量的"单位"。
function q58097577
[X,Y,Z] = peaks(30); Z = (Z - min(Z(:)))*5;

% green, yellow, red
nG = 32-30; nY = 38-32; nR = 55-38;
cmap = [ repmat([0 1 0], [nG 1]); repmat([1 1 0], [nY,1]); repmat([1 0 0], [nR,1]) ];  

figure()
colormap(cmap); 
surf(X,Y,Z);
caxis([30 55]);
cbh=colorbar;
set(cbh,'Ytick',[30 32 38 55]);

导致:

在此输入图像描述


非常感谢!我真的很感激 :) - Federico Gentile
@Federico 不用谢!正如你所看到的,解决方案相当简单,但这仅是因为你使用整数颜色。当处理浮点数时会更加棘手,因为并不总是清楚每个“颜色单位”的大小应该是多少,因此需要多少个单位才能达到目标。你可能最终得到一些荒谬的步骤数量为7153的调色板。 - Dev-iL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接