2014-11-06 4 views
0

저는 IPython/Matplotlib을 사용합니다. 동일한 플롯 창에 다양한 그래프를 그릴 수있는 함수를 만들고 싶습니다. 그러나 다시 그리는 데 어려움이 있습니다. 이건 내 프로그램 test_plot_simple.py입니다 : 내가 두 번째 줄 이후 IPython/matplotlib에서 플롯 다시 그리기

In [1]: run test_plot_simple.py 
In [2]: p_squared() 
In [3]: p_exp() 

을 나는 IPython 명령 행에서 $ python --matplotlib

로 IPython을 시작

from __future__ import division 
import numpy as np 
import matplotlib.pyplot as plt 

x = np.arange(10) 
y2 = (x**2)/(10**2) 
ye = (2**x)/(2**10) 
fig, ax = plt.subplots() 

def p_squared(): 
    ax.plot(x,y2, 'r') 
    plt.show() 

def p_exp(): 
    ax.plot(x,ye, 'r') 
    plt.show() 

, 제곱 그래프가 표시됩니다. 그러나 두 번째 이후에는 아무 일도 일어나지 않습니다. plt.show()이 여기서 왜 작동하지 않습니까?

답변

1

실제적으로 이점을 활용하지 않고 subplots을 호출하는 것처럼 보입니다. 즉, 동일한 캔버스에 플롯 오버하려고합니다. 보다 자세한 설명은 here을 참조하십시오.

from __future__ import division 
import numpy as np 
import matplotlib.pyplot as plt 

x = np.arange(10) 
y2 = (x**2)/(10**2) 
ye = (2**x)/(2**10) 

def p_squared(): 
    plt.plot(x,y2, 'r') 
    plt.show() 

def p_exp(): 
    plt.plot(x,ye, 'r') 
    plt.show() 

는 이제 p_squared()p_exp() 전화에 모두가 플롯을 생산 : 말했다되고, 당신이 필요로하는 모든이 내가 원하는 생각하는 기능을하기 위해 다음이다. 희망이 도움이됩니다.

+0

간단한 예제에서 도움이됩니다. 그러나 다른 이유로 인해 나는 처음부터 축을 추적 할 수있는 객체 지향 접근 방식을 따라야합니다. 따라서 나는 실제로'ax.plot()'을 통해 플롯팅을 할 필요가있다. – ukrutt

0

일부 파기 후에 나는 이것에 대해 올바른 방법을 찾았다 고 생각합니다. show()은 실제로이 목적으로 의도 된 것이 아니라 오히려 draw()입니다. 그리고 객체 지향적으로 유지하고 싶다면 내 그림이나 축을 통해 그려야합니다. 이 같은 것이 가장 좋은 방법이라고 나에게 보인다

from __future__ import division 
import numpy as np 
import matplotlib.pyplot as plt 

x = np.arange(10) 
y2 = (x**2)/(10**2) 
ye = (2**x)/(2**10) 
fig, ax = plt.subplots() 
fig.show() 

def p_squared(): 
    ax.plot(x,y2, 'r') 
    fig.canvas.draw() 

def p_exp(): 
    ax.plot(x,ye, 'r') 
    fig.canvas.draw() 

즉, plt.show() 대신 fig.canvas.draw()를 사용 가

난 아직도 하나 show() 필요

- I가 선택했다 (그 문제에 대한, 또는 fig.show().) 그 숫자가 만들어지면 곧 그렇게하십시오.