Luk*_*kas 5 python plot matplotlib colorbar colormap
我正在尝试创建带有离散色条的pcolormesh图。输出应满足以下条件:
我快到了,但是'extend'关键字的行为不符合我的期望(“ max-arrow”中的颜色与上一级的颜色相同-参见示例)。如何将“ vmax”以上的值设置为单独的颜色(即,我使用的任何颜色图的最后一种颜色)
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)
)
Run Code Online (Sandbox Code Playgroud)
我正在使用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')
Run Code Online (Sandbox Code Playgroud)
的确,如果您进行设置,cmap.set_over("blue")您会看到蓝色代表超过最大值的颜色。
但是,如果要使用颜色图的最后一种颜色作为该颜色,则set_over需要制作一个颜色图,该颜色以第二种颜色停止。为此,可以使用以下原理。如果我们针对颜色映射中的6种不同颜色加上过冲值的颜色,则从该颜色映射中获取7种颜色,将第一种替换为白色,然后将前6种颜色用作边界间隔的颜色。然后将最后的颜色用作超调值的颜色。
import numpy as np; np.random.seed(1)
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.colors
lon,lat = np.meshgrid(np.arange(-180, 180, 10), np.arange(-85, 90, 10))
data = np.sort(np.random.rand(18, 36),axis=1)
# create 7 boundaries between 0 and 0.6, to have 6 intervals
boundaries = np.arange(0, .7, .1)
# create list of 7(!) colors from colormap
cmap_reds = plt.cm.get_cmap('Reds',len(boundaries))
colors = list(cmap_reds(np.arange(len(boundaries))))
#replace first color with white
colors[0] = "white"
cmap = matplotlib.colors.ListedColormap(colors[:-1], "")
# set over-color to last color of list
cmap.set_over(colors[-1])
cm = plt.pcolormesh(lon,lat,data,
cmap=cmap,
norm = mpl.colors.BoundaryNorm(boundaries, ncolors=len(boundaries)-1, clip=False)
)
plt.colorbar(cm, extend="max")
plt.show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2176 次 |
| 最近记录: |