获取matplotlib中的数字列表
我想要:
pylab.figure() pylab.plot(x) pylab.figure() pylab.plot(y) # ... for i, figure in enumerate(pylab.MagicFunctionReturnsListOfAllFigures()): figure.savefig('figure%d.png' % i)
返回pylab中当前数字列表的神奇函数是什么?
Websearch没有帮助…
编辑:正如Matti Pastell的解决scheme所示 ,有一个更好的方法:使用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)
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)
以下一行代码检索现有数字的列表:
import matplotlib.pyplot as plt figs = list(map(plt.figure, plt.get_fignums()))
这应该可以帮助你(从pylab.figure文档):
呼号:
figure(num = None,figsize =(8,6),dpi = 80,facecolor ='w',edgecolor ='k')
创build一个新数字并返回:class:
matplotlib.figure.Figure
实例。 如果num = None ,数字将被增加,并且将会创build一个新的数字。**返回的数字对象有一个保存这个数字的数字属性。
如果你想在一个循环中记住你的数字,那么一个好的方法就是将你的graphics实例存储在一个列表中,并在循环中调用它们。
>> f = pylab.figure() >> mylist.append(f) etc... >> for fig in mylist: >> fig.savefig()
假设你没有在你的任何graphics构造函数中手动指定num
(所以你所有的数字都是连续的),所有你想要保存的数字实际上都有绘制在它们上面的东西。
import matplotlib.pyplot as plt plot_some_stuff() # find all figures figures = [] for i in range(maximum_number_of_possible_figures): fig = plt.figure(i) if fig.axes: figures.append(fig) else: break
有创build一个新的空白图的副作用,但更好,如果你不想依赖不受支持的接口
我倾向于使用string命名我的数字,而不是使用默认(和非描述性)整数。 这是一种检索该名称并用描述性文件名保存数字的方法:
import matplotlib.pyplot as plt figures = [] figures.append(plt.figure(num='map')) # Make a bunch of figures ... assert figures[0].get_label() == 'map' for figure in figures: figure.savefig('{0}.png'.format(figure.get_label()))