如何使用来自 mpl_toolkits.basemap.cm 的颜色图创建离散颜色条?
How can I create a discrete colorbar using a colormap from mpl_toolkits.basemap.cm?
当我绘制 pcolormesh 图时使用颜色图 from matplotlib.cm
(如 "jet"
、"Set2"
等),我可以使用:
cMap = plt.cm.get_cmap("jet",lut=6)
颜色条显示如下:
但是如果我想从 Basemap
包中调用颜色图(如 GMT_drywet
、GMT_no_green
等)。我不能使用 plt.cm,get_cmap
来获取这些颜色图并将它们分开。
mpl_toolkits.basemap.cm
有没有类似lut
的功能?
只要您制作的绘图具有离散颜色值(例如 contour
或 contourf
),那么 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()
扩展上面@tacaswell 的 ,您可以使用 _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()
当我绘制 pcolormesh 图时使用颜色图 from matplotlib.cm
(如 "jet"
、"Set2"
等),我可以使用:
cMap = plt.cm.get_cmap("jet",lut=6)
颜色条显示如下:
但是如果我想从 Basemap
包中调用颜色图(如 GMT_drywet
、GMT_no_green
等)。我不能使用 plt.cm,get_cmap
来获取这些颜色图并将它们分开。
mpl_toolkits.basemap.cm
有没有类似lut
的功能?
只要您制作的绘图具有离散颜色值(例如 contour
或 contourf
),那么 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()
扩展上面@tacaswell 的 _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()