Matlab和python的自定义colormap制作

 MATLAB

方式1:提取配色方案图片(你喜欢的图像好的配色) 的像素点,用网页取色器取值

%% 方式1:提取配色方案图片的像素点
mycolorpoint=[[0 0 16];...
    [8 69 99];...
    [57 174 156];...
    [198 243 99];...
    [222 251 123];...
    [239 255 190]];
mycolorposition=[1 11 33 50 57 64];%插值的位置
%xq = 1:64;
mycolormap_r=interp1(mycolorposition,mycolorpoint(:,1),1:64,'linear','extrap');%extrap是外插,来计算落在 x 域(这里指mycolorposition)范围外的点
mycolormap_g=interp1(mycolorposition,mycolorpoint(:,2),1:64,'linear','extrap');
mycolormap_b=interp1(mycolorposition,mycolorpoint(:,3),1:64,'linear','extrap');
mycolor=[mycolormap_r',mycolormap_g',mycolormap_b']/255;
mycolor=round(mycolor*10^4)/10^4;%保留4位小数

方式2:修改figure框里的colormap分布并保存 

%% 方式2:修改figure框里的colormap分布并保存
Mymap = get(gca,'Colormap');
save('Mymap','Mymap');%把Mymap变量保存为Mymap.mat,位置在matlab当前目录,这样下次调用时就只是用Mymap就可以

 Python

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from matplotlib.colors import ListedColormap,LinearSegmentedColormap
from scipy.interpolate import interp2d
import numpy as np
data = np.load(file="intensitym6.npy")
X = np.arange(0, 64, 1)
Y = np.arange(0, 64, 1)
X, Y = np.meshgrid(X, Y)

# 自定义colormap
def colormap():
  return LinearSegmentedColormap.from_list('cmap', ['#0f354d', '#215a70', '#3c7e8a', '#81c0b2','#a9dec3', '#e0f8e1'], 256)

# imshow bilinear interp.
plt.subplot(1, 2, 1)
im1 = plt.imshow(data, cmap=colormap(), interpolation = 'bicubic')
plt.colorbar(im1, fraction=0.046, pad=0.04, shrink=1.0)

# scipy interp. cubic
f = interp2d(X, Y, data, kind='linear')#cubic这个好像会插值出负值
xnew = np.arange(0, 64, .1)
ynew = np.arange(0, 64, .1)
data1 = f(xnew,ynew)
Xn, Yn = np.meshgrid(xnew, ynew)
plt.subplot(1, 2, 2)
im2 = plt.pcolormesh(Xn, Yn, data1/data1.max(), cmap=colormap()) #为何与plt.show的结果,竖直坐标轴方向不一样?
# 这个和matlab的imagesc函数和pcolor一样的不一样;imshow\imagesc、plt.show是按矩阵的分布画出来,矩阵毕竟是从左上角开始布局的;而pcolor这种,是根据你meshgrid的网格来画的,和xy坐标轴的方向一样
plt.axis('square')
plt.colorbar(im2, fraction=0.046, pad=0.04, shrink=1.0) #不这样的话,colorbar会和图片不等高
plt.subplots_adjust(left=None,bottom=None,right=None,top=None,wspace=0.4,hspace=0.15)#调整子图间距
plt.show()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值