为 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.683
比 0.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;
我有一个 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.683
比 0.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;