gpt4 book ai didi

python - 使用带有注释更改的 matplotlib 的交互式条形图

转载 作者:太空宇宙 更新时间:2023-11-04 05:44:45 25 4
gpt4 key购买 nike

我正在尝试创建一个可以随 slider 动态变化的水平条形图。我遵循了 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)

ages_matrix 是一个2d ndarray,year_labels 是一个1d ndarray

两个主要问题:

  • axs.barh() 不返回带有 set_ydata() 方法的对象,我无法更改 y 数据。如果我只是在 axs 对象上再次绘制数据,它不会删除以前的信息,从而导致图表困惑。
  • 注解也是如此——它不会删除之前的注解。

有没有什么办法可以高效的把斧子擦掉再画呢?也许有什么方法可以刷新 Canvas ?

Clutter

最佳答案

这就是我想出的:

# Init Chart
fig, axs = plt.subplots()
plt.subplots_adjust(bottom=0.25)
axs.set_xlim([0,ages_matrix.max()*1.05])
# Initial Pyramid
pyramid = axs.barh(np.arange(len(ages_matrix[0, :])) * 5,
ages_matrix[0, :],
height=4.5)
# Annotation
ann = axs.annotate(year_labels[0], xy=(0.85, 0.85), xycoords="axes fraction")
# Slider
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):
t = syear.val
year = np.trunc(year_labels[t])
day = (year_labels[t] - year) * 365
ages = ages_matrix[t, :]
for i, p in enumerate(pyramid):
p.set_width(ages[i])
ann.set_text("Year: {}\nDay: {}".format(int(year), int(day)))
fig.canvas.draw()

enter image description here

关于python - 使用带有注释更改的 matplotlib 的交互式条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32718510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com