Я пытаюсь построить набор полигонов с цветовой палитрой. Я создал ScalarMappable объект и создать полигон цвета из этого ScalarMappable, но когда я пытаюсь добавить Colorbar, я получаю ошибку:Matplotlib ScalarMappable: зачем нужно set_array(), если набор норм?
TypeError: You must first set_array for mappable
Документация «set_array» на самом деле не сказать ничего, так что я «Не совсем понятно, что он делает, нужно ли мне давать ему ценности, и если да, то что они будут делать.
Может кто-нибудь объяснить, что делает set_array, и как мне с этим справиться?
plt.clf()
fig, ax = plt.subplots(1,1)
# Set color mappable
range_min = df.col1.min()
range_max = df.col1.max()
cmap = matplotlib.cm.ScalarMappable(
norm = mcolors.Normalize(range_min, range_max),
cmap = plt.get_cmap('binary'))
for i in polygonDict.keys():
ax.add_patch(ds.PolygonPatch(polygonDict[i], fc = cmap.to_rgba(df.col1.loc[i])))
fig.colorbar(cmap, ax = ax)
Это значения, используемые для генерации цветов. 'ScalarMappale' обычно не используется прямо так, как это, но как соединение с другими классами (например,' PolygonCollection'), чтобы вы могли сопоставлять между 'R^1 -> RGBA' – tacaswell
@tcaswell - спасибо. Так что я могу просто передать cmap.set_array() некоторые произвольные значения без забот, так как я уже установил значения vmax и vmin в mcolors.Normalize()? –
Не совсем уверен, как вы это используете, так странно. Я действительно думаю, что вы хотите использовать «PolygonCollection» здесь, так как mpl позаботится обо всем цветовом сопоставлении для вас, я подозреваю, что он будет более результативным по рисованию и проще читать код. – tacaswell