2014-12-19 2 views
7

루프 반복을 통해 그림의 서브 그림을 그릴 필요가 있습니다. 각 반복은 다른 모듈 (= 다른 py 파일)에 정의 된 함수를 호출합니다.이 함수는 한 쌍의 서브 도표를 그립니다. 여기에 내가 뭘하려합니다 - 아아가 작동하지 않습니다, 루프 전에루프 및 함수를 통해 matplotlib 서브 플로트 채우기

1) 행의 적절한 수의 그림을 만들고, 2 열 :

import matplotlib.pyplot as plt  
fig, axarr = plt.subplots(nber_rows,2) 

2

) 루프 내부, 반복 번호 iter_nber에서 각 하위 그림을 그리는 함수를 호출하십시오.

fig, axarr = module.graph_function(fig,axarr,iter_nber,some_parameters, some_data) 

3) 문제는 기본적으로 다음과 같습니다. 각 반복은 같은 행에 한 쌍의 부 도표를 생성합니다.

def graph_function(fig,axarr,iter_nber,some_parameters, some_data): 

    axarr[iter_nber,1].plot(--some plotting 1--) 
    axarr[iter_nber,2].plot(--some plotting 2--) 

    return fig,axarr 

이것은 작동하지 않습니다. 나는 루프의 끝에서 빈 그림으로 끝난다. 함수의 반환 인수에 axarr 만 남겨 두는 것과 같이 위와 같이 다양한 조합을 시도해 보았습니다. 분명히 나는이 그림과 그것의 서브 도표의 논리를 이해하지 못한다.

의견을 보내 주시면 감사하겠습니다.

+0

당신은 작업 예제를 제공 할 수 있을까요? – hitzg

+0

감사합니다 hitzg. 단순화 된 코드가 내 문제가 무엇인지 파악하는 데 도움이되기를 바랍니다. 실제 코드는 매우 길고 세부적인 내용으로 가득 차 있습니다.이 부분은 현재의 질문과 완전히 관련이 없습니다. – Charles

+2

이상한 외모는'axarr [iter_nber, 2]'의 인덱스'2'입니다. 그게 오류를 던져 야합니다 – hitzg

답변

10

게시 한 코드가 대체로 정확합니다. @hitzg가 언급했듯이, 인덱싱 이외에, 당신이하는 일은 아무렇지 않게 보입니다.

그러나 그림 및 축 배열을 플로팅 함수에서 반환하는 것은별로 의미가 없습니다. figure 객체에 대한 액세스가 필요하다면 언제든지 ax.figure을 통해 가져올 수 있습니다. 아무 것도 변경하지 않고 반환하기 위해 아무 것도 변경하지 않습니다.

다음은 시도하려는 유형의 빠른 예입니다. 어쩌면 혼란을 피할 수 있을까요?

import numpy as np 
import matplotlib.pyplot as plt 

def main(): 
    nrows = 3 
    fig, axes = plt.subplots(nrows, 2) 

    for row in axes: 
     x = np.random.normal(0, 1, 100).cumsum() 
     y = np.random.normal(0, 0.5, 100).cumsum() 
     plot(row, x, y) 

    plt.show() 

def plot(axrow, x, y): 
    axrow[0].plot(x, color='red') 
    axrow[1].plot(y, color='green') 

main() 

enter image description here

+0

감사합니다 Joe 예. 유용합니다. 특히 함수 "plot"이 전혀 반환하지 않는 것을 볼 수 있습니다. 나는이 논리를 따를 것이다. 또한, 내 플로팅 기능이 다른 파일에 있다는 사실이 영향을 미칠 수 있는지 궁금합니다. 나는 왜 그런지 모르지만 나는 틀릴 수 있습니다. 다시 한 번 감사드립니다. – Charles

+0

@Charles - 플로팅 기능이 다른 파일에서 제대로 가져 오기만하면 중요하지 않습니다. (예 : '어쩌구'에서 '음모'라고 불리는 함수 인 경우).(plot) (...)보다는 오히려'import blah'와'blah.plot (...)'을 할 필요가 있습니다. , 일반적인 관습은 플롯 된 아티스트 (예 : 선 등)를 반환하는 것입니다. 예를 들어'line = ax.plot (...); 반환 선'. 그것은 선택 사항입니다. 나중에 사용하기 쉽도록하기위한 것입니다. –

관련 문제