如何动态更新matplotlib表格单元格文本

6 投票
1 回答
5616 浏览
提问于 2025-04-18 05:11

我的代码读取两个数字文件,并在窗口的上半部分动态绘制这些数字。 我还在图表下方放了一个表格。 我想把绘制出来的最新数值拿来更新表格中的单元格。 表格在第一次调用“set_text”时会在屏幕上更新,但屏幕上显示的内容不会继续变化,尽管表格在更新。 我需要添加什么才能让表格在更新时显示出新的数值呢?

<snip>
def update_line(num, sdata, line1, d2data, line2, my_table):
    for i in range(0, num):
        line1.set_data(sdata[0, :num], sdata[1,:num])
        line2.set_data(d2data[0, :num], d2data[1,:num])
    tm.sleep(0.1)
    tmp = sdata[1, num]
    my_table._cells[(1, 1)]._text.set_text(tmp)
    return line1,line2, my_table,

line_ani = animation.FuncAnimation(fig, update_line, 149, fargs=(d2data, f, d1data,l, the_table), interval=1, blit=True, repeat=False)

plt.show()

这显示了生成的图形。注意红色和蓝色的线条会在几秒钟内动态绘制

1 个回答

11

原则上,代码 my_table._cells[(1, 1)]._text.set_text(tmp) 应该能更新表格单元格的数据。但这里不生效的原因是因为使用了 blitting 技术。你可以试着在调用 FuncAnimation 时把 blit 设为 False,这样可能会有帮助。如果这样还是不行,那就需要手动在一个循环里用 fig.canvas.draw() 来进行动画更新。

另外,最好不要使用“私有”属性,所以我建议你

my_table.get_celld()[(1, 1)].get_text().set_text(tmp)

撰写回答