Matplotlib:如何设置当前图形?

100

希望这是一个简单的问题,但目前我无法解决。我想使用matplotlib显示2个图形并进行交互。我使用以下代码创建这些图形:

import matplotlib
import pylab as pl

f1 = pl.figure()
f2 = pl.figure()

你可以使用类似 MATLAB 的 pyplot 接口来在两个图中进行绘图和绘制操作。

current_figure = pl.gcf()

我可以确定pyplot接口当前活动的图形,具体取决于我点击哪个图形。现在我想使用pyplot接口向第一个图形绘制一些东西,但是当前图形可能是其中任何一个。那么是否有类似于

pl.set_current_figure(figure)

或者有任何解决办法吗?(我知道我可以使用面向对象的接口,但是对于交互式内容,只使用像plot(x, y)这样的命令更加方便)

2个回答

116

你可以使用以下代码将f1设为当前图形:

pl.figure(f1.number)

另一个选择是给图表命名(或编号),这可能有助于使代码更易于阅读:

pl.figure("Share values")
# ... some plots ...
pl.figure("Profits")
# ... some plots ...

pl.figure("Share values")  # Selects the first figure again

事实上,“数字”图形可以是字符串,这些字符串可能比简单的数字更明确。

PS: pylab.figure() 的 pyplot 等效函数是 matplotlib.pyplot.figure()

PPS:现在figure()接受一个Figure对象,因此您应该能够使用figure(f1)来激活图形f1


2
有没有一种使用matplotlib.figure.Figure而不是pylab的好方法来完成这个任务? - tylerthemiler
@tylerthemiler:是的,但那将是matplotlib.pyplot.figure() - Eric O. Lebigot
如果你想对坐标轴做同样的事情,只需使用 pylab.sca(my_axis)("设置当前坐标轴")。 - PiHalbe
1
我个人更喜欢使用符号并给它们起好名字(例如share_values_fig而不是f1),而不是传递字符串。我发现如果您拼错了符号名称,Python会抱怨,这样更容易检测到错误,而如果您打错了字符串,matplotlib可能会抱怨(在这种情况下,我不确定),但某些函数可能只会创建一个新的图形,因为它无法识别之前的字符串。但两个选项都可以使用,我猜。 - HelloGoodbye

19

给每个图形编号:

f1 = pl.figure(1)
f2 = pl.figure(2)
# use f2
pl.figure(1) # make f1 active again

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接