2014-01-25 1 views
2

단계별로 그래프를 편집 중입니다. 그러면 plt 기능이 matplotlib.pyplot에서 그래픽 출력으로 바로 적용됩니다. 훌륭합니다.왜 pyplot 메서드가 즉시 적용되고 subplot 축 메서드는 적용되지 않습니까?

서브 플로트의 축을 주소 지정하면 더 이상 발생하지 않습니다. 최소한의 작업 예제에서 두 가지 대안을 찾아보십시오.

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 

f = plt.figure() 
sp1 = f.add_subplot(1,1,1) 
f.show() 

# This works well 
sp1.set_xlim([1,5]) 

# Now I plot the graph 
df = pd.Series([0,5,9,10,15]) 
df.hist(bins=50, color="red", alpha=0.5, normed=True, ax=sp1) 

# ... and try to change the ticks of the x-axis 
sp1.set_xticks(np.arange(1, 15, 1)) 
# Unfortunately, it does not result in an instant change 
# because my plot has already been drawn. 
# If I wanted to use the code above, 
# I would have to execute him before drawing the graph. 

# Therefore, I have to use this function: 
plt.xticks(np.arange(1, 15, 1)) 

나는 matplotlib.pyplotaxis 예를 사이에 차이가 있음을 이해합니다. 나는 아무것도 못 찾았나요 아니면 그냥 이런 식으로 일하니?

답변

1

(모든 경우) pyplot 기능의 대부분은 반환하기 전에 plt.draw_if_interactive()를 호출합니다. 따라서 수행 할 경우

plt.ion() 
plt.plot([1,2,3]) 
plt.xlim([-1,4]) 

당신은 음모가 업데이트된다는 것을 알게됩니다. 대화 형을 사용하지 않으면 plt.show()을 호출 할 때까지 플롯이 생성되거나 업데이트되지 않습니다.

그러나 모든 pyplot 함수는 해당하는 (일반적으로) Axes 메서드 주위의 래퍼입니다. 입력 할 때 OO 인터페이스를 사용하고, 아직 물건을 그릴하려면

, 당신은, 당신은 당신이 원하지 않는 pyplot를 사용할 필요가 없습니다이

plt.ion() # if you don't have this, you probably don't get anything until you don't call a blocking `plt.show` 
fig, ax = plt.subplots() # create an empty plot 
ax.plot([1,2,3]) # create the line 
plt.draw() # draw it (you can also use `draw_if_interactive`) 
ax.set_xlim([-1,4]) #set the limits 
plt.draw() # updata the plot 

과 같은 작업을 수행 할 수 있습니다 나는 파이썬에서 사용할 때 draw

1

plt.xticks() 메서드는 그래프를 업데이트하는 pylab_setup()에서 오는 draw_if_interactive() 함수를 호출합니다. sp1.set_xticks()를 사용하여 작업을 수행하기 위해서는, 단지 해당 show() 메소드를 호출

sp1.figure.show() 
+0

'show'를 블로킹한다는 것을 기억하십시오. 그것은 ipython에서 차단되지 않습니다,하지만 내 설정에 의한 것 같아요. 그리고'f.show()'만 있으면 충분하다. 배경 정보는 –

+1

+1이다. – Xiphias

관련 문제