python plot map_python的colormap总结(matplotlib+ncl+气象家园调色盘)

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为自己所用。

气象家园调色盘下载地址:

用链接里的方法克隆完色标之后生成一个txt文件,其文件中包含rgb值,即你将要使用的colormap

之后的工作是在python中导入这个colormap,由于生成的值在[0,255]之间,而python中要用的colormap RGB值范围是[0,1],所以要进行简单转换。

以下将colorbar转换写成一个函数,直接调用即可。

这个函数需要用到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())`

以上三点是我常用的三种选择python colorbar的方法,还有一种方法是可以用matplotlib自己定义新的colorbar以及在原有colorbar的基础上修改形成一个新的colorbar的方法

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值