MATLAB中的颜色吸星大法,有了它,可以吸取任何你喜欢的colorbar
imread函数
本例中提取的 test_pic.jpg 为:
i = imread('test_pic.jpg'); % test_pic是从任何文献网站中截取到的colorbar,注意只需截取colorbar颜色条就好,无需数值。
color = i(11, :, :); % 本例中 i 为 45×279×3 的矩阵,因图为水平放置,故而45方向上的数值基本不变,因此取(任意数, :, :)
colorfinal = squeeze(color); % 压缩尺寸只有1的方向
colormap(double(colorfinal)/255); % 双精度化,转化到[0,1]
colorbar
出图如下:
然而,这样得到的colorbar似乎并不能自定义间隔,如均分为10段colormap(10),每段颜色相同,如下图:
需要将其做成与MATLAB内置一致的类型才可。操作如下:
(1) 像上面一样提取colorbar颜色,这一步的目的是为了能得到colorDefine这个矩阵变量,以便于制作内置形式的函数;
extColor = imread('test_pic.jpg'); % test_pic是从任何文献网站中截取到的colorbar,注意只需截取colorbar颜色条就好,无需数值。
[aa bb cc] = size(extColor);
if aa > bb
colorVar = extColor(:, floor(median(bb)), :);
else
colorVar = extColor(floor(median(aa)), :, :); % 修改之后,无论水平或者竖直放置,均可识别。
end
colorDefine = squeeze(colorVar); % 压缩尺寸只有1的方向
colorDefine = double(colorDefine)/255; % 双精度化,转化到[0,1]
% 以下两行用于检测生成的是否正确;
colormap(colorDefine);
colorbar
(2) 制作内置函数,生成一个自定义命名的函数文件(.m),并将其放在指定MATLAB安装的指定目录下;
function map = dayon(N) % 名字和文件名必须保持一致;
if nargin<1 || isempty(N)
N = size(get(gcf,'colormap'),1);
else
assert(isscalar(N)&&isreal(N),'First argument must be a real numeric scalar.')
end
C = colorDefine; % 只需修改这里。这里把上面计算出来的colorDefine数值粘贴进来就好。格式为N×3的矩阵;
num = size(C,1);
vec = linspace(0,num+1,N+2);
map = interp1(1:num,C,vec(2:end-1),'linear','extrap'); %...插值
map = max(0,min(1,map));
end
(3)m文件制作好之后,可以建立个自己的文件夹,如dayon, 将其放在matlab的toolbox下面目录,本例为
G:\Program Files\MATLAB\R2017a\toolbox
注意,如果使用MATLAB命令行,输入
colormap(dayon);
colorbard
没有反应,则需通过“设置路径”的方式添加
成功的显示为
参考网址
http://blog.sciencenet.cn/blog-3425629-1265751.html
阿昆的科研日常(感谢作者,大家可关注)
https://zhuanlan.zhihu.com/p/87540630
https://zhuanlan.zhihu.com/p/84632306
配色网址
https://medium.com/@dannysmith/finding-a-good-colour-palette-through-exploration-b90abde88a1c#.j7e0r5lit
自己收集的ShuihuColor(不定期更新)