我正在尝试创建一个可以随滑块动态变化的水平条形图。我已经按照 matplotib 网站上的食谱进行操作,它适用于line
数据。编码:
def interactive_pyramid(ages_matrix, year_labels):
fig, axs = plt.subplots()
plt.subplots_adjust(bottom=0.25)
l, = axs.plot(range(len(ages_matrix[0, :])), ages_matrix[0, :])
axs.annotate(year_labels[0], xy=(0.85, 0.85), xycoords="axes fraction")
axs.set_ylim([0,800])
pprint (dir(axs))
axcolor = 'lightgoldenrodyellow'
axyear = plt.axes([0.25, 0.1, 0.5, 0.1], axisbg=axcolor)
syear = Slider(axyear, 'Year', 0, ages_matrix.shape[0] - 1, 0)
def update(val):
year = syear.val
# axs.barh(range(len(ages_matrix[0, :])), ages_matrix[val, :])
l.set_ydata(ages_matrix[val, :])
# axs.annotate(year_labels[year], xy=(0.85, 0.85), xycoords="axes fraction")
axs.Annotation.remove()
fig.canvas.draw()
syear.on_changed(update)
age_matrix 是 a2d ndarray
并且 year_labels 是 a1d ndarray
两个主要问题:
axs.barh()
不返回带有方法的对象我set_ydata()
不能更改 y 数据。如果我只是在 axs 对象上再次绘制数据,它不会删除以前的信息,从而导致图表混乱。- 注释也是如此 - 它不会删除前一个。
有什么方法可以有效地擦除斧头并再次绘制它?也许某种方式来刷新画布?