色彩贴图始终以零为中心

我正在试图绘制一个有正数和负数的矩阵。 数字将在-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 (见下文)。 不过,我不会删除这个问题,因为我无法找到答案,直到我发布了这个问题,然后点击相关的问题/答案。 另一方面,我不介意它是否被删除,因为如果有人正在寻找正确的关键字,那么可以在其他地方找到正确答案。


显然,我在挖掘一段时间后自己找到了答案。 pcolor提供可选输入vminvmax 。 如果我将它们分别设置为-1和1,则它完全可以解决问题。 颜色编码似乎与vmin和vmax相关,而不是数据的最小值和最大值,这是绘制的。 所以改变剧情命令(和评论)

# a plot ranging from -1 to 1, where the value 0 is colorcoded in white
ax = fig.add_subplot(1, 2, 1)
plt.pcolor(X, Y, Z, vmin=-1, vmax=1) # vmin, vmax not needed here
plt.colorbar()

# a plot ranging from -0.2 to 0.8, where the value 0 is colorcoded in white
ax = fig.add_subplot(1, 2, 2)
plt.pcolor(X, Y, Z*0.5 + 0.3, vmin=-1, vmax=1)   # rescaled Z-Data
plt.colorbar()

它根据我的需要生成一个图形: 正确的数字

所以,设置vmin=-1, vmax=1完成这项工作,我不必在颜色表本身上更改内容。

链接地址: http://www.djcxy.com/p/22473.html

上一篇: colormap, always centered on zero

下一篇: Override default snippets in Atom