colorbar使用映射中不包含的值

时间:2018-05-21 18:26:12

标签: numpy matplotlib

我试图创建一个包含多个子图的图形。对于每个子图,我设置facecolor。我想在左边提供一个颜色条,它给出了我设置上下文的面部颜色。但是,我唯一明白如何做到这一点的方法,包括我不想要的mapping

另外,我认识到这可能是一个XY问题。我对批评和任何达到我最终目标的方法持开放态度

[MCVE]

import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np

np.random.seed([3, 1415])

a = np.random.rand(3, 3)

f, axes = plt.subplots(3, 4)

jet = cm.jet

for i in range(3):
    for j in range(1, 4):
        axes[i, j].set_facecolor(jet(a[i, j-1]))

m = plt.subplot2grid(axes.shape, (0, 0), rowspan=3).imshow(a, jet)
plt.colorbar(m)

enter image description here

我想要这个

enter image description here

1 个答案:

答案 0 :(得分:3)

colorbar需要在数字和颜色之间使用一些映射。但是,如果您不想在图中显示,可以使用ScalarMappable实例以最一般的方式创建此映射。

import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np

np.random.seed([3, 1415])

a = np.random.rand(3, 3)

f, axes = plt.subplots(3, 3)

jet = cm.jet

for i in range(3):
    for j in range(3):
        axes[i, j].set_facecolor(jet(a[i, j]))

m = cm.ScalarMappable(cmap=jet)
m.set_array([])
plt.colorbar(m, ax=axes)

plt.show()

enter image description here

如果游戏中有标准化,例如norm = plt.Normalize(-1,2),您可以使用它来获取正确的颜色jet(norm(a[i, j]))并创建可映射为 cm.ScalarMappable(cmap=jet, norm=norm)