我正在尝试绘制一个包含正数和负数的矩阵。数字将在 -1 到 1 的区间内,但不在完整范围内。例如,数字有时可能在 -0.2 到 +0.8 的范围内(参见下面的代码)。我想使用 bwr-colormap(蓝色 -> 白色 - 红色),这样零总是用白色进行颜色编码。 -1 应该用尽可能深的蓝色进行颜色编码,+1 应该用尽可能深的红色进行颜色编码。这是一个示例,其中两个图只能通过其颜色条来区分。
import numpy
from matplotlib import pyplot as plt
# some arbitrary data to plot
x = numpy.linspace(0, 2*numpy.pi, 30)
y = numpy.linspace(0, 2*numpy.pi, 20)
[X, Y] = numpy.meshgrid(x, y)
Z = numpy.sin(X)*numpy.cos(Y)
fig = plt.figure()
plt.ion()
plt.set_cmap('bwr') # a good start: blue to white to red colormap
# a plot ranging from -1 to 1, hence the value 0 (the average) is colorcoded in white
ax = fig.add_subplot(1, 2, 1)
plt.pcolor(X, Y, Z)
plt.colorbar()
# a plot ranging from -0.2 to 0.8 hence 0.3 (the average) is colorcoded in white
ax = fig.add_subplot(1, 2, 2)
plt.pcolor(X, Y, Z*0.5 + 0.3) # rescaled Z-Data
plt.colorbar()
这段代码创建的图形可以在这里看到:
如上所述,我正在寻找一种始终使用相同颜色对值进行颜色编码的方法,其中 -1:深蓝色,0:白色,+1:深红色。这是单行本,我遗漏了什么,还是我必须为此自己写点什么?
编辑:再挖一点之后,我自己找到了一个令人满意的答案,没有触及颜色图,而是使用可选输入 pcolor
(见下文)。不过,我不会删除这个问题,因为在我发布这个问题并点击相关问题/答案之前,我找不到关于 SO 的答案。另一方面,我不介意它是否被删除,因为如果有人正在寻找正确的关键字,那么可以在其他地方找到这个问题的确切答案。
原文由 Nras 发布,翻译遵循 CC BY-SA 4.0 许可协议
显然,经过更长时间的挖掘,我自己找到了答案。
pcolor
提供可选输入vmin
和vmax
。如果我将它们分别设置为 -1 和 1,它就完全解决了问题。颜色编码似乎与 vmin 和 vmax 有关,而不是与绘制的数据的最小值和最大值有关。因此,将绘图命令(和注释)更改为它会根据我的需要生成一个图形:
因此,设置
vmin=-1, vmax=1
就可以完成工作,我不必更改颜色图本身的内容。