我正在尝试创建一个具有离散色条的pcolormesh图。输出应满足以下条件:
- 第一级应为白色
- 数据应在某个级别被截断
- 截断以上的数据应具有单独的颜色(即使用颜色映射的最后一种颜色)
import numpy as np
import xarray as xr
import matplotlib as mpl
import matplotlib.pyplot as plt
ds = xr.Dataset(
coords={'lon': np.arange(-180, 180, 10),
'lat': np.arange(-85, 90, 10)},
data_vars={'data': (('lat', 'lon'), np.random.rand(18, 36))})
cmap = plt.cm.get_cmap('Reds')
cmap.set_under('w')
# cmap.set_over() # do something here?
levels = np.arange(0, .7, .1)
ds.data.plot.pcolormesh(
cmap=cmap,
vmin=levels[1],
# vmax=levels[-1],
extend='max',
norm = mpl.colors.BoundaryNorm(levels, ncolors=cmap.N, clip=False)
)
我正在使用xarray,但plt.pcolormesh的行为也是一样的:
p = plt.pcolormesh(
np.arange(-180, 180, 10),
np.arange(-85, 90, 10),
np.random.rand(18, 36),
cmap=cmap,
vmin=levels[1],
# vmax=levels[-1],
norm = mpl.colors.BoundaryNorm(levels, ncolors=cmap.N, clip=False)
)
plt.colorbar(p, extend='max')
vmin
和norm
中的一个应该会覆盖另一个,但显然同时指定两者似乎可以以某种方式给出所需的绘图。 - ImportanceOfBeingErnest