我想更改Scilab中颜色条中的颜色间隔,以便不会有不同部分的恒定高度。
我能够使用以下代码更改yticks位置以及yticks的数量:
fig= gcf();
cb = fig.children(1);
cb.font_size = 3;
cb.auto_ticks(2)="off";
cb.y_ticks = tlist(["ticks","locations","labels"], yticks, string(yticks));
但我无法找到改变颜色变化位置的方法。我在colorbar函数中搜索过,我认为解决方案可能在函数的以下部分,但我不太确定,而且我也不知道如何更改代码。
//draw the colorbar
y = linspace(umin,umax,nb_colors)
col=[colminmax(1):colminmax(2)]
Sgrayplot([0 1],y,[col;col],colminmax=colminmax)
要更清楚地了解所需结果,请参阅下图。我希望不同颜色的边界正好落在我的yticks所在的位置。
答案 0 :(得分:0)
实现此目的的一种方法是定义自己的色彩映射表。以下是我的习惯"逆转" jetcolormap代码。通过更改r
,g
和b
数组,您可以修改颜色。如果您不需要灵活处理不同数量的颜色,则可以使用硬编码的值替换插值的cmap
值。如果您需要在颜色变化之间保持不相等的距离,只需多次定义相同的颜色,即:白色,白色,粉红色,红色,红色,红色......
//modification from jetcolormap
//reversing color order
function [cmap] = reverse_jetcolormap(varargin)
// Check number of input argument
if size(varargin)<>1 then
error(msprintf(gettext("%s: Wrong number of input argument(s): %d expected.\n"), "reverse_jetcolormap", 1));
end
n=varargin(1);
// Check type of input argument
if typeof(n)<>"constant" then
error(msprintf(gettext("%s: Wrong type for input argument #%d: An integer value expected.\n"), "reverse_jetcolormap", 1));
end
// Check if input argument is real
if ~isreal(n) then
error(msprintf(gettext("%s: Wrong type for input argument #%d: An integer value expected.\n"), "reverse_jetcolormap", 1));
end
// Check size of input argument
if size(n,"*")<>1 then
error(msprintf(gettext("%s: Wrong size for input argument #%d: An integer value expected.\n"), "reverse_jetcolormap", 1));
end
if n==0 then
cmap = [];
return
end
// r = [0.000 0.125 0.375 0.625 0.875 1.000 ; 0.000 0.000 0.000 1.000 1.000 0.500]
// g = [0.000 0.125 0.375 0.625 0.875 1.000 ; 0.000 0.000 1.000 1.000 0.000 0.000]
// b = [0.000 0.125 0.375 0.625 0.875 1.000 ; 0.500 1.000 1.000 0.000 0.000 0.000]
r = [0.000 0.125 0.375 0.625 0.875 1.000 ; 0.500 1.000 1.000 0.000 0.000 0.000]
g = [0.000 0.125 0.375 0.625 0.875 1.000 ; 0.000 0.000 1.000 1.000 0.000 0.000]
b = [0.000 0.125 0.375 0.625 0.875 1.000 ; 0.000 0.000 0.000 1.000 1.000 0.500]
d = 0.5/max(n,1);
x = linspace(d,1-d, n)
cmap = [ interpln(r, x);...
interpln(g, x);...
interpln(b, x) ]';
cmap = min(1, max(0 , cmap)) // normaly not necessary
endfunction