【问题标题】:How can I create a discrete colorbar using a colormap from mpl_toolkits.basemap.cm?如何使用 mpl_toolkits.basemap.cm 中的颜色图创建离散颜色条?
【发布时间】:2016-04-07 02:36:11
【问题描述】:

当我绘制 pcolormesh 绘图时,使用颜色图 from matplotlib.cm(如 "jet""Set2" 等),我可以使用:

 cMap = plt.cm.get_cmap("jet",lut=6)    

颜色条显示如下:

但如果我想从Basemap 包中调用颜色图(如GMT_drywetGMT_no_green 等)。我不能使用plt.cm,get_cmap 来获取这些颜色图并将它们分开。

mpl_toolkits.basemap.cm 是否有类似lut 的功能?

【问题讨论】:

  • 您要向哪种情节添加颜色条?你能出示MCVE吗?
  • 您可以在颜色映射对象上使用私有方法_resample 来执行此操作。不确定为什么这个方法是私有的......

标签: python numpy matplotlib matplotlib-basemap colormap


【解决方案1】:

扩展上面的@tacaswell 的comment,您可以使用_resample 方法实现相同的功能。这将为pcolor/pcolormesh 图生成分段颜色图,不会生成像contourf 这样的离散步进颜色条。为了达到与您在问题中使用 jet 相同的效果:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import cm
plt.figure()
cmap = cm.GMT_drywet._resample(6)
pm = plt.pcolormesh(np.random.rand(10,8), cmap=cmap)
plt.colorbar(pm, orientation='horizontal')
plt.show()

【讨论】:

    【解决方案2】:

    只要您制作的绘图具有离散的颜色值(例如contourcontourf),那么colorbar 应该会自动生成具有离散步长的颜色条。这是基于the first example from the basemap documentation的情节:

    from mpl_toolkits.basemap import Basemap, cm
    import matplotlib.pyplot as plt
    import numpy as np
    
    fig, ax = plt.subplots(1, 1)
    ax.hold(True)
    
    map = Basemap(projection='ortho',lat_0=45,lon_0=-100,resolution='l')
    map.drawcoastlines(linewidth=0.25)
    map.drawcountries(linewidth=0.25)
    map.fillcontinents(color='coral',lake_color='aqua')
    map.drawmapboundary(fill_color='aqua')
    map.drawmeridians(np.arange(0,360,30))
    map.drawparallels(np.arange(-90,90,30))
    
    nlats = 73; nlons = 145; delta = 2.*np.pi/(nlons-1)
    lats = (0.5*np.pi-delta*np.indices((nlats,nlons))[0,:,:])
    lons = (delta*np.indices((nlats,nlons))[1,:,:])
    wave = 0.75*(np.sin(2.*lats)**8*np.cos(4.*lons))
    mean = 0.5*np.cos(2.*lats)*((np.sin(2.*lats))**2 + 2.)
    x, y = map(lons*180./np.pi, lats*180./np.pi)
    
    map.contourf(x,y,wave+mean,15, alpha=0.5, cmap=cm.GMT_drywet)
    cb = map.colorbar()
    plt.show()
    

    【讨论】:

    • 谢谢!但是当我使用 pcolor/pcolormesh 类型绘图时,它不起作用。
    • 这是因为pcolor 使用连续变化的颜色图而不是离散级别绘制数据。如果您编辑问题以更清楚地解释您正在寻找的结果,并显示您当前用于生成绘图的代码,这将有所帮助。
    猜你喜欢
    • 2021-09-05
    • 2019-10-20
    • 2018-12-01
    • 2017-01-28
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多