2011-05-11 2 views
1

하나 이상의 그림을 만드는 많은 함수가 있습니다. 도면이 생성되기 때문에, 기준이 매우 좋아, 사전에 추가된다matplotlib 그림에 대한 참조 사전을 반복하는 방법

다른 함수에
self.figures['figureKey'] = figure() 

는 I이 사전을 반복하고, 각 도면을 저장하려는; 사전 키를 파일 이름의 일부 또는 전부로 사용하는 것이 좋습니다. 나는 사전을 반복 할 수 있었지만 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을() '를 사용하고 반환 된 배열을 반복 시도,하지만 키 이름으로 연결을 잃는다. 아마도 그림 포인터에서 그림 번호를 역 참조 할 수 있습니까? 누구나이 매끄러운 접근 방식을 가지고 있습니까?

"왜 그냥 ..."라는 문구로 대답을 시작하려는 경향에 저항하십시오. 그 대답은 나에게 명백한 접근법이 아니라는 것입니다. 나는이 일종의 새로운이야.

답변

1

그림 인스턴스에서 그림 번호를 얻을 수 있습니다. From the docs :

반환되는 그림 개체에는이 번호를 포함하는 숫자 특성이 있습니다.

것은 그래서 번호로 그림에 액세스 할 수, 당신이 할 수 있습니다 :

figure(self.figures[fig].number) 

나는하기 matplotlib 그 생각을 테스트하기 위해 지금 설치되어 있지 않습니다.

+0

당신의 솔루션은 매력처럼 작동했습니다. 문서에 대한 언급을 주셔서 감사합니다. 비록 "숫자"속성이 있다고 말하는 것 이외에는, 표 형식을 찾지 못했습니다. 또는 pyplot_api 또는 figure_api에 대한 설명서에서 찾을 수 없었습니다. 나는 이것이 수업의 철저한 설명을 찾을 수있는 장소가되어서는 안된다고 생각합니다. – 2NinerRomeo

+0

@ 2NinerRomeo,'number' 속성에 대해 언급 한 유일한 곳이기도합니다.'number' 속성이 _plate.php에 의해 추가되는지 궁금합니다. – senderle

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를 현재 디렉토리에 저장하십시오.

+0

제 생각에'savefig()'는 현재 그림 번호에'figure()'를 호출하여 설정 한 현재 그림을 저장합니다. 그래서 당신이하고있는 일은 (내가 문서를 올바르게 해석한다면) 같은 이름을 세 가지 다른 이름으로 저장하고 있습니다. – senderle

+0

@sendle, 맞습니다. 플롯에 일부 데이터를 추가하는 것은 실수였습니다. 나는 내 시스템에서 실제로 작동하는 예제로 나의 대답을 업데이트했다. – Blair

+0

숫자 속성에 대해 알지 못했습니다. 그것은 트릭을 능숙하게합니다. – 2NinerRomeo

2

아마도 당신이하고있는 것에 대해 혼란스러워 할 것입니다 ... 그냥 수치를 저장하고 싶다면 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) 
+0

각 인스턴스마다 고유 한 .savefig 메소드가 있음을 알면 유용합니다. – 2NinerRomeo