我试图用彩色地图绘制一组多边形。我设置了一个ScalarMappable对象并从该ScalarMappable生成多边形颜色,但是当我尝试添加一个colorbar时,我得到了一个错误:
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)
一种更简单的方法是将空数组
[]
发送到set_array()
。 我真的不知道为什么,但我在this answer中看到过,而且很有效。我只知道在设置数组之前,从
get_array()
中得到None
,这可能就是为什么会得到这个错误。你可以:
经过几次测试,您似乎可以将世界上的任何数组([df.col1]、[0,1]、[hello]])发送到
set_array()
,而您的colorbar就是您想要的那个。它不可能是None
。我注意到,如果将数组设置为数字数组,然后调用
autoscale()
,那么colorbar的min和max值将是该数组的min和max。我希望这能有帮助。
这似乎已经在matplotlib v3.1.0中修复(在v3.0.2中不起作用)。
这可能太晚了,但我今天碰到了同样的问题。
据我所知,imshow()和scatter()创建了一个可映射对象,以便在两步过程中从浮点值转换为颜色。首先将浮点数映射到范围0..1,然后在颜色映射中查找该标准化数字的相应RGB。
像PolygonPatch这样的艺术家不会创建这个可映射的,所以您需要自己使用colorbabase()来创建它
这就是我最后做的。
相关问题 更多 >
编程相关推荐