为 contourf 定制的颜色图

Custom made colormap for contourf

我有一个 3d 函数,想在 [0.683 0.9545 0.9973] 处显示等高线。我想让区域0->0.683填充红色,0.683->0.9545填充蓝色,0.9545->0.9973为绿色,0.9973->1.0 为白色。

所以基本上我有以下内容:

contours = [0.0 0.683 0.9545 0.9973 1.0]
contourf(x,y,z,contours)

尝试过

colormap([1 0 0; 0 0 1; 0 1 0; 1 1 1])

但这是不对的。请问我的颜色图应该是什么样子才能得到我想要的颜色?

我猜测,您需要使每种颜色的行数与每个范围的大小成正比。所以 0->0.6830.683->0.9545 大很多。在您的颜色图中,您每行只提供了一行,因此 Matlab 假设这些颜色应该在整个范围内平均分配(即 0->1),其中 4 种颜色意味着红色代表 0->0.25,蓝色代表 0.25->0.5 等...

尝试类似这样的答案:How to create a custom colormap programmatically? 但不要使用 linspace,而是使用 repmat。你需要有足够的行来说明你的 4 位小数点精度(你可能想重新考虑)所以你总共有 10 000 行:

red = repmat([1 0 0], 6830, 1);
blue = repmat([0 0 1], 9545 - 6830, 1);
green = repmat([0 1 0], 9973 - 9545, 1);
white = repmat([1 1 1], 10000 - 9973 , 1);

map = [red;blue;green;white];
colormap(map);

或者:

map = zeros(10000,3);
map(1:6830,1) = 1;
map(6831:9545,3) = 1;
map(9546:9973,2) = 1;
map(9974:end,:) = 1;