2014-06-17 1 views
1

루프를 사용하여 플롯을 만들고이 플롯들이 x 축을 공유하고 싶습니다. 다음은 코드 예제입니다. 물론 플롯 할 함수와 함수는 더 복잡합니다. 모든 하위 그림은 x 축을 공유하고 싶습니다. 내가 제대로 질문을 이해한다면x 축을 루프에 공유하는 방법은 무엇입니까?

import matplotlib.pyplot as plt 
import numpy as np 

val = [0.1, 0.2, 0.3] 
nplots = len(val) 
plt.figure() 
for i, alpha in enumerate(val): 
    plt.subplot(nplots,1,i+1) 
    plt.plot(np.linspace(0,1,100), a * np.linspace(0,1,100)**2) 
plt.show() 
+0

당신 "이 X 축을 공유"무엇을 의미합니까? 분명히 다른 하위 그림을 만들고 있습니다. 같은 범위에 걸쳐 있다는 의미라면 xlim()을 사용하여 명시 적으로 제한을 설정할 수 있습니다. – Ajean

+0

예상되는 결과는 무엇입니까? – Christian

+0

모든 x 축은 (데이터로 인해) 같은 범위에 걸쳐있을 것입니다. 그러나 플롯이 x 축을 공유하는 경우 한 플롯을 확대하면 다른 플롯에서도 확대되고 그 결과는 얻고 자하는 동작입니다. – Ger

답변

2

, 여기 레시피 예는 도움이 될 수 있습니다 :

당신의 맥락에서

http://matplotlib.org/examples/pylab_examples/shared_axis_demo.html

이 어떻게 일을합니까?

fig = plt.figure() 
ax0 = plt.subplot(nplots,1,1) 
plt.plot(np.linspace(0,1,100), a * np.linspace(0,1,100)**2) 
for i, alpha in enumerate(val): 
    plt.subplot(nplots,1,i+2,sharex=ax0) 
    plt.plot(np.linspace(0,1,100), a * np.linspace(0,1,100)**2) 
plt.show() 

편집 : 이 더 우아한 솔루션을 내 자신의 대답을 업데이트 영업 이익이 좋아하는 수 있습니다

vals = np.linspace(0,1,3) 
nplots = len(vals) 
fig, axs = plt.subplots(nrows=nplots, ncols=1, sharex=True) 
for i, alpha in enumerate(vals): 
    axs[i].plot(np.linspace(0,1,100), alpha * np.linspace(0,1,100)**2) 
plt.show() 
+0

사실, 내 문제는 루프와 관련이 있습니다. 도끼 개체 목록을 만들어야합니까? – Ger

+0

하위 플롯이 루프에 생성되는지 여부는 중요하지 않겠지 만, 서로 공유하기 위해 ax 오브젝트에 대한 참조를 유지해야합니다. – Ajean

+0

아마도 다른 사람들과 공유 할 첫 번째 코드를 유지할 것입니다 (예제에서와 같이) – Ajean

관련 문제