MPA*_*MPA 3 python matplotlib colormap
预案 Python 包向 Matplotlib 库添加了附加功能,包括颜色图操作对我来说特别有吸引力的一项功能是旋转/移动色彩图的能力。给你举个例子:
\nimport proplot as pplot\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nstate = np.random.RandomState(51423)\ndata = state.rand(30, 30).cumsum(axis=1)\n\nfig, axes = plt.subplots(ncols=3, figsize=(9, 4))\nfig.patch.set_facecolor("white")\n\naxes[0].pcolormesh(data, cmap="Blues")\naxes[0].set_title("Blues")\naxes[1].pcolormesh(data, cmap="Blues_r")\naxes[1].set_title("Reversed Blues")\naxes[2].pcolormesh(data, cmap="Blues_s")\naxes[2].set_title("Rotated Blues")\n\nplt.tight_layout()\nplt.show()\nRun Code Online (Sandbox Code Playgroud)\n\n在第三列中,您会看到 180\xc2\xb0 旋转版本Blues。目前 ProPlot 存在一个错误,不允许用户将绘图样式恢复为 Matplotlib 的默认样式,所以我想知道是否有一种简单的方法可以在 Matplotlib 中旋转颜色图,而无需求助于 ProPlot。我总是发现 Matplotlib 中的 cmap 操作有点神秘,所以任何帮助将不胜感激。
如果您想要做的是移动颜色图,则可以(相对)轻松地完成:
def shift_cmap(cmap, frac):
"""Shifts a colormap by a certain fraction.
Keyword arguments:
cmap -- the colormap to be shifted. Can be a colormap name or a Colormap object
frac -- the fraction of the colorbar by which to shift (must be between 0 and 1)
"""
N=256
if isinstance(cmap, str):
cmap = plt.get_cmap(cmap)
n = cmap.name
x = np.linspace(0,1,N)
out = np.roll(x, int(N*frac))
new_cmap = matplotlib.colors.LinearSegmentedColormap.from_list(f'{n}_s', cmap(out))
return new_cmap
Run Code Online (Sandbox Code Playgroud)
示范:
x = np.linspace(0,1,100)
x = np.vstack([x,x])
cmap1 = plt.get_cmap('Blues')
cmap2 = shift_cmap(cmap1, 0.25)
fig, (ax1, ax2) = plt.subplots(2,1)
ax1.imshow(x, aspect='auto', cmap=cmap1)
ax2.imshow(x, aspect='auto', cmap=cmap2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1374 次 |
| 最近记录: |