代码之家  ›  专栏  ›  技术社区  ›  Light_B jezrael

为什么pcolormesh和带有定制颜色条的contourf plot之间显示的颜色条不同

  •  0
  • Light_B jezrael  · 技术社区  · 7 年前

    我已经改编了一个定制的颜色比例从 NCL 跟随离散间隔颜色条 example . 我的数据数组位于NetCDF文件中,当我尝试打印它时,打印和颜色栏看起来与预期的一样 pcolormesh 但当我策划时,它会变得疯狂 contourf 情节我是不是在做错事 决定性的 色阶?

    import matplotlib.colors
    import xarray as xr
    
    # loading data
    
    ds = xr.open_dataset(path/tofile/data.nc)
    
    
    ## custom color bar
    ## converting RGB values to 0,1
    cmap3 =  matplotlib.colors.ListedColormap([(127/255, 150/255, 255/255), (142/255, 178/255, 255/255), (181/255, 201/255, 255/255), (214/255, 226/255, 237/255),\
    (242/255, 221/255, 160/255), (242/255, 132/255, 68/255), (229/255, 0/255, 0/255), (1, 163/255, 10/255), (1, 249/255, 20/255), (172/255, 206/255, 100/255), (125/255, 190/255, 84/255)])
    
    # I want to discretize the colorbar according to values
    vals = [-1.0, 0.0, 0.2 ,0.5, 0.8, 1.0, 1.5, 2.0, 4.0 , 6.0 , 8.0,  10]
    norm = matplotlib.colors.BoundaryNorm(vals, cmap3.N)
    
    # variable to be plotted
    ds.PV.squeeze().plot.pcolormesh(cmap=cmap3, norm=norm, vmin=0, vmax=10)
    # contourf plot which is giving unexpected result
    ds.PV.squeeze().plot.contourf(cmap=cmap3, norm=norm, vmin=0, vmax=10)
    

    具有Pcolormesh绘图的预期颜色比例:

    Pcolormesh plot with the right colorscale

    绘制轮廓图时颜色比例错误: Wrong color scale

    下面是具有默认颜色比例的轮廓图 Contourf with default colorscale

    这就是我的 对的

    fig, ax =plt.subplots(figsize=(6,1))
    
    cb3 = matplotlib.colorbar.ColorbarBase(ax, cmap=cmap3,
                                norm=norm,
                                extend='neither',
                                ticks=vals,
                                spacing='uniform',
                                orientation='horizontal')    
    

    correct colorbar

    1 回复  |  直到 7 年前
        1
  •  1
  •   Light_B jezrael    7 年前

    @重要的,重要的 this 详细的回答有帮助。在里面 contourf 必须明确指定绘制等高线所需的标高 pcolormesh 似乎会根据颜色栏自动拾取它

    ds.PV.squeeze().plot.contourf(cmap=cmap3, norm=norm,levels=vals)
    

    Correct plot