获取matplotlib中的数字列表

时间:2010-09-23 23:30:00

标签: python 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中返回当前数字列表的神奇函数是什么?

网络搜索没有帮助......

6 个答案:

答案 0 :(得分:84)

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)

答案 1 :(得分:15)

修改:作为Matti Pastell's solution shows,有一种更好的方式:使用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)

答案 2 :(得分:15)

以下单行检索现有数据列表:

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

答案 3 :(得分:3)

这应该对你有所帮助(来自pylab.figure doc):

  

call signature ::

     

图(num =无,figsize =(8,6),   dpi = 80,facecolor ='w',edgecolor ='k')

     

创建一个新数字并返回一个   :类:matplotlib.figure.Figure   实例。如果 num = ,则   图号将增加和   将创建一个新的数字。**   返回的图形对象有一个   保留此号码的 number 属性。

如果你想在一个循环中回忆你的数字,那么一个好的方法是将你的数字实例存储在一个列表中并在循环中调用它们。

>> f = pylab.figure()
>> mylist.append(f)
etc...
>> for fig in mylist:
>>     fig.savefig()

答案 4 :(得分:2)

假设您没有在任何图形构造函数中手动指定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

有创建新空白数字的副作用,但如果您不想依赖不受支持的界面则会更好

答案 5 :(得分:1)

我倾向于使用字符串命名我的数字,而不是使用默认(和非描述性)整数。这是一种检索该名称并使用描述性文件名保存图形的方法:

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()))