ipython 노트북의 루프에서 전체를 동적으로 업데이트하는 방법 (한 셀 내에서)
환경 : Python 2.7, matplotlib 1.3, IPython 노트북 1.1, linux, chrome. 코드는 하나의 단일 입력 셀에 있습니다.--pylab=inline
IPython 노트북과 팬더를 사용하여 스트림을 소비하고 5 초마다하고 동적으로 업데이트하고 싶습니다.
print 문을 사용하여 데이터를 텍스트 형식으로 인쇄하면 완벽하게 작동합니다. 출력 셀은 데이터를 계속 인쇄하고 새 행을 추가합니다. 단 다음에는 제품에 표시되지 않습니다. 그러나 루프를 제거하면 한 번만 플로팅하십시오. 잘 작동합니다.
그런 다음 몇 가지 간단한 테스트를 수행했습니다.
i = pd.date_range('2013-1-1',periods=100,freq='s')
while True:
plot(pd.Series(data=np.random.randn(100), index=i))
#pd.Series(data=np.random.randn(100), index=i).plot() also tried this one
time.sleep(5)
프로세스를 수동으로 중단 할 때까지 (ctrl + m + i) 출력에 아무것도 표시되지 않습니다. 그리고 중단하면 여러 개의 겹친 선으로 표시됩니다. 그러나 내가 정말로 원하는 것은 5 초마다 표시되고 업데이트되는 플롯입니다 (또는 plot()
위에서 언급 한 문 출력과 마찬가지로 함수가 호출 인쇄 될 때마다 잘 작동 함). 셀이 완벽하게 나중에 만 최종 차트를 사용하거나 원하는 것이 아닙니다.
나는 추가하려고 시도했다 plot()
. 그들 중 어느 것도 작동하지 않는다. IPython 노트북의 한 셀 내에서 for / while 루프로 전반을 동적으로 업데이트하는 방법이 궁금합니다.
사용 IPython.display
모듈 :
%matplotlib inline
import time
import pylab as pl
from IPython import display
for i in range(10):
pl.plot(pl.randn(100))
display.clear_output(wait=True)
display.display(pl.gcf())
time.sleep(1.0)
다음을 추가 wait=True
하여 더 개선 할 수 있습니다 clear_output
.
display.clear_output(wait=True)
display.display(pl.gcf())
- 셀이 중단 될 때 두 개가 아닌 하나의 플롯으로 끝나도록
display
하기 전에를 호출하십시오clear_output
. - 를 잡아서
KeyboardInterrupt
셀 출력이 역 추적에 흩어져 있지 않도록합니다.
import matplotlib.pylab as plt
import pandas as pd
import numpy as np
import time
from IPython import display
%matplotlib inline
i = pd.date_range('2013-1-1',periods=100,freq='s')
while True:
try:
plt.plot(pd.Series(data=np.random.randn(100), index=i))
display.display(plt.gcf())
display.clear_output(wait=True)
time.sleep(1)
except KeyboardInterrupt:
break
함수 를 추가 show()
하거나 gcf().show()
뒤 6 시도하십시오 plot()
. 이렇게하면 현재 Figure가 업데이트됩니다 (gcf ()는 현재 Figure에 대한 참조를 반환합니다).
여기에 게시 된 다른 솔루션에 레이블을 추가하면 모든 루프에서 새 레이블이 계속 추가됩니다. 처리 비용 다음을 사용하여이를 확인합니다.clf
for t in range(100)
if t % refresh_rate == 0:
plt.clf()
plt.plot(history['val_loss'], 'r-', lw=2, label='val')
plt.plot(history['training_loss'], 'b-', lw=1, label='training')
plt.legend()
display.clear_output(wait=True)
display.display(plt.gcf())
'ProgramingTip' 카테고리의 다른 글
배열에서 첫 번째 요소를 제거하는 가장 좋은 방법은 무엇입니까? (0) | 2020.10.16 |
---|---|
모델의 특정 필드 만 업데이트합니다. (0) | 2020.10.16 |
명령 줄을 사용하여 mysql 사용자 비밀번호 변경 (0) | 2020.10.16 |
SQL Server의 Oracle RowID와 동일 (0) | 2020.10.16 |
업데이트에서 T-SQL 꾸미기 (0) | 2020.10.16 |