我有许多功能,每个功能都会创建一个或多个数字。在创建图形时,会将引用添加到字典中,如下所示:
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()'并迭代返回的数组,但这会失去与键名的关联。也许可以从图形指针中取消引用图形编号?任何人都有一个光滑的方法吗?
请拒绝接受用“你为什么不......”这句话开始回答的倾向。答案就是这对我来说不是一个明显的方法。我对此很陌生。
答案 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。