我想要做的很简单:对于使用plt.subplots()
创建的情节,我想显示一个颜色条。
所以,这就是我的工作:
def plotVF(self, u, v):
m = np.sqrt(np.power(u, 2) + np.power(v, 2))
xrange = np.linspace(0, u.shape[1], u.shape[1]);
yrange = np.linspace(0, u.shape[0], u.shape[0]);
x, y = np.meshgrid(xrange, yrange)
mag = np.hypot(u, v)
scale = 1
lw = scale * mag / mag.max()
f, ax = plt.subplots()
h = ax.streamplot(x, y, u, v, color=mag, linewidth=lw, density=3, arrowsize=1, norm=plt.Normalize(0, 70))
ax.set_xlim(0, u.shape[1])
ax.set_ylim(0, u.shape[0])
ax.set_xticks([])
ax.set_yticks([])
cbar = f.colorbar(h, ax=ax)
cbar.ax.tick_params(labelsize=5)
plt.show()
相应于docs中显示的内容。 但是,我一直在接受:
AttributeError: 'StreamplotSet' object has no attribute 'autoscale_None'
这个例子只有一个情节,但我会有不止一个,这就是为什么我不直接使用plt.colorbar().
答案 0 :(得分:0)
ax.streamplot
会返回StreamplotSet
个对象。这不是可用于制作colorbar
的mappabple实例。但是,根据docs for streamplot
,它包含LineCollection
和FancyArrowPatch
个对象的集合。我们可以使用LineCollection
制作颜色栏。
可以使用h
从h.lines
访问它。因此,要制作颜色条,您需要:
cbar = f.colorbar(h.lines, ax=ax)
您可以在matplotlib
图库here中找到相关示例。