如何用两种颜色创建插值色彩图或调色板?

Blu*_*Bit 2 matlab plot colors colorbar matlab-figure

我想在两种颜色之间创建一个调色板.例如,BlueRed之间有20或50个实例.

如何在Matlab R2014b中实现这一目标?

the*_*alk 13

您可以使用任何类型的插值(例如interp1)在两种颜色或多种颜色之间创建自己的自定义色彩映射.色图基本上是具有RGB值的3列矩阵.在你的情况下,它很简单,因为你只需要[1 0 0]蓝色 [0 0 1]以及两者之间的线性插值.linspace因此是最好的选择.

n = 50;               %// number of colors

R = linspace(1,0,n);  %// Red from 1 to 0
B = linspace(0,1,n);  %// Blue from 0 to 1
G = zeros(size(R));   %// Green all zero

colormap( [R(:), G(:), B(:)] );  %// create colormap

%// some example figure
figure(1)
surf(peaks)
colorbar
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请注意,您也可以通过键入来使用colormap GUI colormapeditor.


另外你也可以使用2D插值:

n = 50;                %// number of colors

cmap(1,:) = [1 0 0];   %// color first row - red
cmap(2,:) = [0 1 0];   %// color 25th row - green
cmap(3,:) = [0 0 1];   %// color 50th row - blue

[X,Y] = meshgrid([1:3],[1:50]);  %// mesh of indices

cmap = interp2(X([1,25,50],:),Y([1,25,50],:),cmap,X,Y); %// interpolate colormap
colormap(cmap) %// set color map

%// some example figure
figure(1)
surf(peaks)
colorbar
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


而另一个例子是使用样条插值来获得更宽的蓝色和红色区域:

n = 50;                %// number of colors

v = [0,0,0.1,0.5,0.9,1,1];
x = [-5*n,0, 0.45*n, 0.5*n, 0.55*n, n, 5*n]; 
xq = linspace(1,n,n);
vq = interp1(x,v,xq,'spline');
vq = vq - min(vq);
vq = vq./max(vq);

B = vq;  %// Blue from 0 to 1 with spline shape
R = fliplr(B);  %// Red as Blue but mirrored
G = zeros(size(R));   %// Green all zero

colormap( [R(:), G(:), B(:)] );  %// create colormap

%// some example figure
figure(1)
surf(peaks)
colorbar
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


或使用您想要的任何数学函数:

n = 50;                %// number of colors

t = linspace(0,4*pi,50);

B = sin(t)*0.5 + 0.5;  %// Blue from 0 to 1 as sine
R = cos(t)*0.5 + 0.5;  %// Red from 0 to 1 as cosine
G = zeros(size(R));   %// Green all zero

colormap( [R(:), G(:), B(:)] );  %// create colormap

%// some example figure
figure(1)
surf(peaks)
colorbar
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述