如何迭代matplotlib数字的引用字典

时间:2011-05-11 00:03:42

标签: python matplotlib

我有许多功能,每个功能都会创建一个或多个数字。在创建图形时,会将引用添加到字典中,如下所示:

self.figures['figureKey'] = figure()

在另一个函数中,我想迭代这个字典并保存每个数字;将字典键用作文件名的一部分或全部是很好的。我已经能够迭代字典,但figure()函数似乎需要一个对应于图号的整数,拒绝键给出的引用。

    for fig in self.figures:
        figure(self.figures[fig])  #does not work
        figure(fig)                #also does not work
        savefig(fig)               #seems to let me use the key as a filename--nice

我还尝试使用`get_fignums()'并迭代返回的数组,但这会失去与键名的关联。也许可以从图形指针中取消引用图形编号?任何人都有一个光滑的方法吗?

请拒绝接受用“你为什么不......”这句话开始回答的倾向。答案就是这对我来说不是一个明显的方法。我对此很陌生。

3 个答案:

答案 0 :(得分:3)

也许我对你正在做的事感到困惑......如果你只是想保存这个数字,为​​什么不使用fig对象的savefig方法呢?

pyplot.savefig保存活动数字,但使用特定数字实例的fig.savefig方法可以保存该特定数字,无论哪个数字处于活动状态。

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(10)

figures = [plt.figure() for _ in range(10)]

for i, fig in enumerate(figures):
    ax = fig.add_subplot(111)
    ax.plot(x, i*x)
    ax.axis('equal')

for i, fig in enumerate(figures):
    fig.savefig('temp_slope_%02i.png' % i)

答案 1 :(得分:1)

您可以从图形实例中获取图号。 From the docs

  

返回的图形对象具有一个包含此编号的数字属性。

因此,要按编号访问数字,您可以这样做:

figure(self.figures[fig].number)

我现在没有安装matplotlib来测试它。

答案 2 :(得分:1)

我可能在这里遗漏了一些东西(不是真正的matplotlib用户),但是你不是将图形对象本身存储在字典中吗?如果是这样,您可以使用for key, value in self.figures.items()迭代键和值,然后使用number属性获取图号。

作为测试,我使用交互式解释器尝试了以下内容:

>>> import matplotlib.pyplot as plt
>>> figures = {}
>>> figures['name1'] = plt.figure()
>>> plt.plot([1, 2, 3])
>>> figures['name2'] = plt.figure()
>>> plt.plot([6, 5, 4])
>>> for key, figure in figures.items():
...     print 'Saving figure #%d as %s.' % (figure.number, key)
...     plt.figure(figure.number)
...     plt.savefig(key)
...
Saving figure #2 as name2
Saving figure #1 as name1

它似乎有效:2个图(一个单调增加,一个单调递减)被保存为当前目录中的PNG文件name1.png和name2.png。