使用面向对象的Matplotlib制作交互式图形

7 投票
1 回答
1715 浏览
提问于 2025-04-16 12:00

通过面向对象的方式使用Matplotlib,对于不需要交互的后端来说其实挺简单的:

 from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
 from matplotlib.figure import Figure

 fig = Figure()
 canvas = FigureCanvas(fig)
 ax = fig.add_subplot(1,1,1)
 ax.plot([1,2,3])
 canvas.print_figure('test.png')

但是如果我想用交互式的后端做类似的事情,我就完全失败了(我连交互式图形都无法显示出来)。有没有人能分享一些用面向对象的方式创建交互式图形的例子?

1 个回答

8

好吧,你需要使用一个支持交互的后端!

backend_agg 是不支持交互的。而 backend_tkagg(或者其他类似的后端)是支持的。

一旦你使用了一个交互式的后端,你需要做的事情就像这样:

import matplotlib.backends.backend_tkagg as backend
from matplotlib.figure import Figure

manager = backend.new_figure_manager(0)
fig = manager.canvas.figure
ax = fig.add_subplot(1,1,1)
ax.plot([1,2,3])
fig.show()
backend.show()

老实说,这并不是使用面向对象接口的正确方式。如果你需要交互式图表,应该这样做:

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot([1,2,3])
plt.show()

你仍然在使用面向对象的接口,只是让 pyplot 来处理创建图形管理器和进入图形用户界面的主循环。

撰写回答