colormap又叫colorbar是一個包含三列矩陣的色彩映射表户誓,簡單來說就是一個shape為(N,3)的矩陣。
矩陣中的值的值取值范圍為[0,1]
每一行代表一個顏色,即RGB值
1.matplotlib colorbar
(a)matplotlib自帶的colorbar
python的matplotlib模塊中內嵌了大批常用的colormapshttps://matplotlib.org/examples/color/colormaps_reference.html
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap as mp
import numpy as np
import netCDF4 as nc
#%%
obj=nc.Dataset('E:/tidal mixing/gebco/GEBCO_2014_2D_90.0_5.0_100.0_17.0.nc')
lon=obj.variables['lon'][0:-1:2]
lat=obj.variables['lat'][0:-1:2]
elevation=obj.variables['elevation'][0:-1:2,0:-1:2]
elevation=np.ma.masked_greater_equal(elevation,0)
plt.figure(1,figsize=(8,6))
m=mp(llcrnrlon=90.0,llcrnrlat=5.0,urcrnrlon=100.0,urcrnrlat=17.0,\
resolution='i',projection='mill')
m.drawcoastlines()
lonlabel=['90','92','94','96','98','100']
lon_num=[90,92,94,96,98,100]
latlabel=['6','8','10','12','14','16']
lat_num=[6,8,10,12,14,16]
lon_num,temp=m(lon_num,np.arange(len(lon_num)))
temp,lat_num=m(np.arange(len(lat_num)),lat_num)
plt.xticks(lon_num,lonlabel,fontsize=20)
plt.yticks(lat_num,latlabel,fontsize=20)
plt.xlabel('Longitude(E)',fontsize=20)
plt.ylabel('Latitude(N)',fontsize=20)
xx,yy=np.meshgrid(lon,lat)
xx,yy=m(xx,yy)
cmap_color=plt.cm.get_cmap('RdYlBu_r') #_r的意思是反轉colorbar
m.pcolormesh(xx,yy,elevation,cmap=cmap_color)
cbar=m.colorbar()
cbar.ax.tick_params(labelsize=20)
2.使用ncl的colorbar
是之前在氣象家園上看到的一個大神自己寫的包cmaps日矫,這個包中基本包含了ncl的所有colorbar。氣象家園地址 ncl colormap:http://www.ncl.ucar.edu/Document/Graphics/color_table_gallery.shtml 使用方法很簡單绑榴,首先導入cmaps包哪轿,然后改變cmap就行
import cmaps
....
cmap_color=cmaps.ncl_default #如需反轉colorbar,其方法是cmap_color=cmap_color.reversed()
3. 使用氣象家園調色盤
這種方法是結合氣象家園的調色盤翔怎,將平時看文獻看到的colorbar為自己所用窃诉。
氣象家園調色盤下載地址:
http://bbs.06climate.com/forum.php?mod=viewthread&tid=33880&extra=page%3D1
用鏈接里的方法克隆完色標之后生成一個txt文件,其文件中包含rgb值赤套,即你將要使用的colormap
之后的工作是在python中導入這個colormap飘痛,由于生成的值在[0,255]之間,而python中要用的colormap RGB值范圍是[0,1]容握,所以要進行簡單轉換宣脉。
以下將colorbar轉換寫成一個函數(shù),直接調用即可剔氏。
這個函數(shù)需要用到matplotlib的colors脖旱,因此要提前導入
from matplotlib import colors
def dcmap():
file_path='E:/python/colorbar/test.txt'
fid=open(file_path)
data=fid.readlines()
n=len(data);
rgb=np.zeros((n,3))
for i in np.arange(n):
rgb[i][0]=data[i].split(',')[0]
rgb[i][1]=data[i].split(',')[1]
rgb[i][2]=data[i].split(',')[2]
rgb=rgb/255.0
icmap=colors.ListedColormap(rgb,name='my_color')
return icmap
cmap_color=dcmap()
m.pcolormesh(xx,yy,elevation,cmap=cmap_color.reversed())
- 利用RGB矩陣建立colorbar
import matplotlib.colors as colors
rgb=([214,226,255],[181,201,255],[127,150,255],[255,160,0],[255,124,0],[255,25,0])
rgb=np.array(rgb)/255.0
icmap=colors.ListedColormap(rgb,name='my_color')
cmap_color=icmap #.reversed()
-
利用python默認的顏色庫快速配色
python顏色定義如下:
mycolor=['aliceblue','skyblue','deepskyblue','orange','tomato','red']
cmap_color = colors.LinearSegmentedColormap.from_list('my_list', mycolor)