如何在 python 中创建从绿色到红色的热图?

新手上路,请多包涵

我正在尝试绘制 -3 到 3 范围内的对数比率,并希望负比率为绿色,正比率为红色,0(中心)的对数比率为白色。 matplotlib 中没有一个预先存在的配色方案提供此选项,而且我一直无法弄清楚如何手动输出漂亮的渐变。

原文由 A. Gup 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

您可以使用 LinearSegmentedColormap 创建自己的。我喜欢将红色和绿色通道的上限和下限设置为小于 1.0,这样颜色就不会太亮(这里我使用了 0.8)。调整它以适合您的口味。

有关详细信息,请参阅 matplotlib 网站上的 custom_cmap 示例

这是一个工作示例:

 import matplotlib.pyplot as plt
import matplotlib.colors as colors
import numpy as np

# This dictionary defines the colormap
cdict = {'red':  ((0.0, 0.0, 0.0),   # no red at 0
                  (0.5, 1.0, 1.0),   # all channels set to 1.0 at 0.5 to create white
                  (1.0, 0.8, 0.8)),  # set to 0.8 so its not too bright at 1

        'green': ((0.0, 0.8, 0.8),   # set to 0.8 so its not too bright at 0
                  (0.5, 1.0, 1.0),   # all channels set to 1.0 at 0.5 to create white
                  (1.0, 0.0, 0.0)),  # no green at 1

        'blue':  ((0.0, 0.0, 0.0),   # no blue at 0
                  (0.5, 1.0, 1.0),   # all channels set to 1.0 at 0.5 to create white
                  (1.0, 0.0, 0.0))   # no blue at 1
       }

# Create the colormap using the dictionary
GnRd = colors.LinearSegmentedColormap('GnRd', cdict)

# Make a figure and axes
fig,ax = plt.subplots(1)

# Some fake data in the range -3 to 3
dummydata = np.random.rand(5,5)*6.-3.

# Plot the fake data
p=ax.pcolormesh(dummydata,cmap=GnRd,vmin=-3,vmax=3)

# Make a colorbar
fig.colorbar(p,ax=ax)

plt.show()

在此处输入图像描述

原文由 tmdavison 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 matplotlib.colors.LinearSegmentedColormapfrom_list 方法似乎比这里的其他一些答案更直观。

 from  matplotlib.colors import LinearSegmentedColormap
cmap=LinearSegmentedColormap.from_list('rg',["r", "w", "g"], N=256)

在此处输入图像描述

或者进行更复杂的调整:

 from  matplotlib.colors import LinearSegmentedColormap
c = ["darkred","red","lightcoral","white", "palegreen","green","darkgreen"]
v = [0,.15,.4,.5,0.6,.9,1.]
l = list(zip(v,c))
cmap=LinearSegmentedColormap.from_list('rg',l, N=256)

在此处输入图像描述

原文由 ImportanceOfBeingErnest 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题