gpt4 book ai didi

python - 旋转 matplotlib colourmap

转载 作者:行者123 更新时间:2023-12-05 02:03:35 38 4
gpt4 key购买 nike

ProPlot Python 包向 Matplotlib 库添加了其他功能,包括颜色映射操作。对我特别有吸引力的一个功能是旋转/移动颜色图的能力。举个例子:

import proplot as pplot
import matplotlib.pyplot as plt
import numpy as np

state = np.random.RandomState(51423)
data = state.rand(30, 30).cumsum(axis=1)

fig, axes = plt.subplots(ncols=3, figsize=(9, 4))
fig.patch.set_facecolor("white")

axes[0].pcolormesh(data, cmap="Blues")
axes[0].set_title("Blues")
axes[1].pcolormesh(data, cmap="Blues_r")
axes[1].set_title("Reversed Blues")
axes[2].pcolormesh(data, cmap="Blues_s")
axes[2].set_title("Rotated Blues")

plt.tight_layout()
plt.show()

enter image description here

在第三列中,您会看到 Blues 的 180° 旋转版本。目前 ProPlot 患有 a bug这不允许用户将绘图样式恢复为 Matplotlib 的默认样式,所以我想知道是否有一种简单的方法可以在不借助 ProPlot 的情况下在 Matplotlib 中旋转颜色图。我总是发现 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

演示:

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)

enter image description here

关于python - 旋转 matplotlib colourmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65018952/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com