我正在根据变量值中设置的值绘制补丁。
pc = PatchCollection(patches, match_original=True)
norm = Normalize()
cmap = plt.get_cmap('Blues')
pc.set_facecolor(cmap(norm(values)))
ax.add_collection(pc)
现在我还想要一个额外的颜色条。如果我插入(例如在set_facecolor之前)
pc.set_array(values) # values
plt.colorbar(pc)
它有效,但现在所有颜色都变成了灰度。以下set_facecolor
不会改变任何内容。即使我在cmap=
中添加plt.colorbar()
命令,一切都保留在灰度级中。我不知道该怎么做。
答案 0 :(得分:3)
您是否在询问如何通过特定色彩图为集合着色?
只需设置色彩映射(cmap
)和array
即可。
例如:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import PatchCollection
num = 10
data = np.random.random((num, 2))
values = np.random.normal(10, 5, num)
# I'm too lazy to draw irregular polygons, so I'll use circles
circles = [plt.Circle([x, y], 0.1) for (x,y) in data]
col = PatchCollection(circles)
col.set(array=values, cmap='jet')
fig, ax = plt.subplots()
ax.add_collection(col)
ax.autoscale()
ax.axis('equal')
fig.colorbar(col)
plt.show()
解释你问题中发生了什么:
对于集合,可以手动设置面部颜色(即set_facecolors
),也可以将颜色映射到由颜色条控制的一系列值(set_array
)。这两个选项是互斥的。因此,在您致电set_array
后,原始的脸部颜色将被忽略。