Matplotlib 获取当前图形对象的方法
在使用Matplotlib绘制图形时,有时需要获取并操作当前正在使用的图形。特别是在使用ipython时,Matplotlib提供的%matplotlib魔法命令使得图形能够直接在代码中更新,如果无法获取到当前图形对象,就无法更新图形。
下面介绍几种获取当前图形对象的方法。
阅读更多:Matplotlib 教程
方法一:使用plt.gcf()
Matplotlib提供了plt.gcf()函数,获取当前正在使用的图形对象。gcf是”get current figure”的缩写。
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [4, 5, 6])
# 获取当前图形对象
fig = plt.gcf()
print(fig)
输出:
Figure(640x480)
可以看到,我们成功获取了当前正在使用的图形对象。可以使用该对象进行各种操作,例如保存图形、修改标题等。
方法二:使用plt.show(block=False)
当使用plt.show()或plt.show(block=True)显示图形时,该函数会阻塞当前的进程。如果没有人为地关闭图形窗口,代码将无法继续向下执行。
因此,一些Matplotlib版本中添加了plt.show(block=False),该函数可以立即返回,并将图形交给事件循环处理。此时,我们就可以立即获取当前图形对象。
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [4, 5, 6])
# 显示图形,并立即返回
plt.show(block=False)
# 获取当前图形对象
fig = plt.gcf()
print(fig)
输出:
Figure(640x480)
方法三:使用plt.ioff()与plt.ion()
在ipython中,我们可以使用%matplotlib魔法命令将Matplotlib图形直接嵌入到ipython中。默认情况下,该命令会开启”interactive mode”,使得图形可以动态更新。
如果要获取当前图形对象,我们可以将”interactive mode”关闭,使用plt.show()显示图形,然后再手动关闭图形窗口。
import matplotlib.pyplot as plt
plt.ioff()
plt.plot([1, 2, 3], [4, 5, 6])
plt.show()
# 等待手动关闭图形窗口
# 获取当前图形对象
fig = plt.gcf()
print(fig)
输出:
Figure(640x480)
需要注意的是,关闭”interactive mode”后,图形将不再自动更新,需要手动调用plt.draw()或plt.pause()等函数刷新图形。
import matplotlib.pyplot as plt
plt.ioff()
plt.plot([1, 2, 3], [4, 5, 6])
plt.show()
# 等待手动关闭图形窗口
# 获取当前图形对象
fig = plt.gcf()
fig.suptitle("New Title")
# 刷新图形
plt.draw()
# 继续更新图形
plt.plot([4, 5, 6], [7, 8, 9])
plt.pause(1)
# 再次刷新图形
plt.draw()
总结
通过上述方法,我们可以获取到当前正在使用的Matplotlib图形对象,从而进行各种操作。需要根据具体情况选择不同的方法,例如在ipython中使用plt.gcf()是最简单的方法,而非ipython环境下,需要使用plt.show(block=False)或plt.ioff()与plt.ion()来获取当前图形对象。
极客教程