擅长:python、mysql、java
<p>一种更简单的方法是将空数组<code>[]</code>发送到<code>set_array()</code>。
我真的不知道为什么,但我在<a href="https://stackoverflow.com/a/26739882/4195725">this answer</a>中看到过,而且很有效。</p>
<p>我只知道在设置数组之前,从<code>get_array()</code>中得到<code>None</code>,这可能就是为什么会得到这个错误。</p>
<p>你可以:</p>
<pre><code>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])))
cmap.set_array([]) # or alternatively cmap._A = []
fig.colorbar(cmap, ax = ax)
</code></pre>
<p>经过几次测试,您似乎可以将世界上的任何数组([df.col1]、[0,1]、[hello]])发送到<code>set_array()</code>,而您的colorbar就是您想要的那个。它不可能是<code>None</code>。</p>
<p>我注意到,如果将数组设置为数字数组,然后调用<code>autoscale()</code>,那么colorbar的min和max值将是该数组的min和max。</p>
<p>我希望这能有帮助。</p>