如何在 Octave 中设置用户自定义的颜色图?

How to Set a User-Defined Colormap in Octave?

我有一段简单的代码可以计算一些数量并将其绘制为等高线:

%Calculate Biot number vs. h for a selected material
h = (0:5:1000)';
mat = "Copper";
lambda = 386;
r = (0:0.25:50);  %In cm
 R = r./100; %In m
%Calculate matrix of Bi values
% R = length(h) x C = length(r)
Bi = (h.*R)/lambda;
%Contour Plot of results
%Set boundaries at Bi = 0, 0.1, 1
conts = [0, 0.1, 1];
ptitle = ["Biot Number for a ", mat, " Sphere"];
%Create a personalized colormap with 30 values.
%    0<Bi<0.1  Green
%    0.1<=Bi<1 Yellow
%    Bi >= 1   Red
my_green = [229,255,204]./255;
my_yellow = [255,255,204]./255;
my_pink = [255,229,204]./255;
my_cmap = [repmat(my_green, 10, 1); repmat(my_yellow, 10, 1); repmat(my_pink, 10, 1) ];
clf;
colormap (my_cmap);
contourf(h, r, Bi, conts, 'showtext', 'on');
title(ptitle)
xlabel ("h(W/m^2*K)");
ylabel ("r(cm)");

结果缺少中间色(黄色):

对此可以做些什么?

你的轮廓太少,所以选错了颜色。如果你这样做 contourf(h, r, Bi, 0:0.2:1, 'showtext', 'on'); 你会得到:

此外,我建议让 "green" 和 "yellow" 更加不同,因为在某些显示器上可能很难区分它们。


这就是我所说的“玩弄 L, M, N:

conts = [0, 0.1, 1];
ptitle = ["Biot Number for a ", mat, " Sphere"];
%Create a personalized colormap
my_green = [229,255,204]./255;
my_yellow = [255,255,204]./255;
my_pink = [255,229,204]./255;
my_cmap = [repmat(my_green, 10, 1); repmat(my_yellow, 90, 1); repmat(my_pink, 1, 1) ];

figure(); contourf(h, r, Bi, conts, 'showtext', 'on');

colormap (my_cmap);
caxis([0 1.01])
title(ptitle)
xlabel ("h(W/m^2*K)");
ylabel ("r(cm)");

顺便说一句,我 运行 这个是在 MATLAB R2018a 上的,以防你想知道为什么你没有得到完全相同的东西。

添加下面的代码来定义 countours 并生成颜色图,该过程可以自动化。

conts = [0, 0.05, 0.1, 0.3, 0.7, 1];
%Create a personalized colormap with 50 values distributed proportionally to Bi values
step = 50/max(max(Bi));
L = ceil(step*0.1);
M = ceil(step*(1-0.1));
H = ceil(step*(max(max(Bi))-1));
my_green = [229,255,204]./255;
my_yellow = [255,255,204]./255;
my_pink = [255,229,204]./255;
my_cmap = [repmat(my_green, L, 1); repmat(my_yellow, M, 1); repmat(my_pink, H, 1)];

获得: