美文网首页绘图设置matplotlib
python的colormap总结(matplotlib+ncl

python的colormap总结(matplotlib+ncl

作者: 榴莲气象 | 来源:发表于2019-01-19 16:04 被阅读72次

    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转换写成一个函数,直接调用即可。
    这个函数需要用到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的方法

    相关文章

      网友评论

        本文标题:python的colormap总结(matplotlib+ncl

        本文链接:https://www.haomeiwen.com/subject/gxrzdqtx.html