旋转 matplotlib 颜色图

MPA*_*MPA 3 python matplotlib colormap

预案 Python 包向 Matplotlib 库添加了附加功能,包括颜色图操作对我来说特别有吸引力的一项功能是旋转/移动色彩图的能力。给你举个例子:

\n
import 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()\n
Run Code Online (Sandbox Code Playgroud)\n

在此输入图像描述

\n

在第三列中,您会看到 180\xc2\xb0 旋转版本Blues。目前 ProPlot 存在一个错误,不允许用户将绘图样式恢复为 Matplotlib 的默认样式,所以我想知道是否有一种简单的方法可以在 Matplotlib 中旋转颜色图,而无需求助于 ProPlot。我总是发现 Matplotlib 中的 cmap 操作有点神秘,所以任何帮助将不胜感激。

\n

Diz*_*ahi 5

如果您想要做的是移动颜色图,则可以(相对)轻松地完成:

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)

在此输入图像描述