获取matplotlib中的图形列表

57 投票
6 回答
46910 浏览
提问于 2025-04-16 04:31

我想要:

pylab.figure()
pylab.plot(x)
pylab.figure()
pylab.plot(y)
# ...
for i, figure in enumerate(pylab.MagicFunctionReturnsListOfAllFigures()):
  figure.savefig('figure%d.png' % i)

在pylab中,有什么神奇的函数可以返回当前的图形列表吗?

网上搜索也没找到相关信息...

6 个回答

17

编辑:正如 Matti Pastell 的解决方案所示,其实有更好的方法:使用 plt.get_fignums()


import numpy as np
import pylab
import matplotlib._pylab_helpers

x=np.random.random((10,10))
y=np.random.random((10,10))
pylab.figure()
pylab.plot(x)
pylab.figure()
pylab.plot(y)

figures=[manager.canvas.figure
         for manager in matplotlib._pylab_helpers.Gcf.get_all_fig_managers()]
print(figures)

# [<matplotlib.figure.Figure object at 0xb788ac6c>, <matplotlib.figure.Figure object at 0xa143d0c>]

for i, figure in enumerate(figures):
    figure.savefig('figure%d.png' % i)
29

下面这行代码可以获取现有图形的列表:

import matplotlib.pyplot as plt
figs = list(map(plt.figure, plt.get_fignums()))
114

Pyplot 有一个叫做 get_fignums 的方法,它可以返回一个图形编号的列表。这个方法应该能满足你的需求:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(100)
y = -x

plt.figure()
plt.plot(x)
plt.figure()
plt.plot(y)

for i in plt.get_fignums():
    plt.figure(i)
    plt.savefig('figure%d.png' % i)

撰写回答