PatchCollection 的 Matplotlib 颜色条覆盖颜色

bio*_*ime 4 python matplotlib

我根据变量值中设置的值绘制补丁。

pc = PatchCollection(patches, match_original=True)  

norm = Normalize()
cmap = plt.get_cmap('Blues')
pc.set_facecolor(cmap(norm(values)))
ax.add_collection(pc)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在我还想要一个额外的颜色条。如果我插入(例如在 set_facecolor 之前)

pc.set_array(values) # values
plt.colorbar(pc)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

它有效,但现在所有颜色都变成了灰度。以下内容set_facecolor不会改变任何内容。即使我cmap=在其中添加命令,plt.colorbar()所有内容仍保持灰度。我不知道该怎么办。

Joe*_*ton 6

您是否想问如何通过特定的颜色图为集合着色?

只需设置颜色图 ( 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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

解释一下你的问题中发生了什么:

对于集合,面部颜色可以手动设置(即),也可以将颜色映射到由颜色条控制的set_facecolors一系列值( )。set_array这两个选项是互斥的。因此,在调用 后set_array,原始的 Facecolors 将被忽略。