我试图创建一个包含多个子图的图形。对于每个子图,我设置facecolor
。我想在左边提供一个颜色条,它给出了我设置上下文的面部颜色。但是,我唯一明白如何做到这一点的方法,包括我不想要的mapping
。
另外,我认识到这可能是一个XY问题。我对批评和任何达到我最终目标的方法持开放态度
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)
我想要这个
答案 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()
如果游戏中有标准化,例如norm = plt.Normalize(-1,2)
,您可以使用它来获取正确的颜色jet(norm(a[i, j]))
并创建可映射为
cm.ScalarMappable(cmap=jet, norm=norm)
。