Jupyter λ
ΈνΈλΆμμ %matplotlib inline
λ λ μ΄μ μλ‘μ΄ ipywidgets 6.0 @interact
μ μ μλνμ§ μλ κ² κ°μ΅λλ€. λ΄κ° μλ ν μΈλΌμΈ λ°±μλλ μ΄λ―Έμ§μ ν¨κ» display_data λ©μμ§λ₯Ό 보λ΄κΈ° μ μ μ
μ΄ μμ ν λλ λκΉμ§ κΈ°λ€λ¦½λλ€(https://github.com/ipython/ipython/blob/7cde22957303ab53df8bd464ad5d7ed616197f31/μ λ±λ‘λ μ€ν ν ν
μ°Έμ‘°). IPython/core/pylabtools.py#L383). ipywidgets 6.0μμλ μ°λ¦¬κ° μΊ‘μ²ν μΆλ ₯μ λν΄ λ³΄λ€ κ΅¬μ²΄μ μΌλ‘ μνΈ μμ©μ΄ μλνλ λ°©μμ λ³κ²½νμ΅λλ€. ν¨μ μ€ν μ€μ μ μ‘
import matplotlib.pyplot as plt
from ipywidgets import interact
%matplotlib inline
x = [1,2,5,4,3]
@interact(n=(2,5))
def f(n):
plt.plot(x[:n])
μ΄ λ¬Έμ λ μΈλΌμΈ λ°±μλ(μ μ©ν¨)μ μ μλνκ³ ipywidgets μνΈ μμ©κ³Όλ μ μλνλ μ’μ μ루μ μ μ°Ύμ μ μλ λ°©λ²μ΄ μλμ§ μμ보기 μν΄ ν λ‘ μ μμνλ κ²μ λλ€.
μλ₯Ό λ€μ΄ μΈλΌμΈ λ°±μλμ μ΄λ―Έμ§λ₯Ό μ¦μ νλ¬μνλλ‘ μ§μνκ³ μ μ€νμ΄ μλ£λ νμλ νλ¬μνμ§ μλλ‘ νλ λ°©λ²μ΄ μλ€λ©΄ κ·Έκ²μΌλ‘ μΆ©λΆν μ μμ΅λλ€. μ΄ μ½λλ μλ₯Ό λ€μ΄ μλν©λλ€(μΈλΌμΈ λ°±μλκ° νμ±ν λμ§ μμ μν )
import matplotlib.pyplot as plt
from ipywidgets import interact
x = [1,2,5,4,3]
@interact(n=(2,5))
def f(n):
plt.plot(x[:n])
plt.show()
CC @SylvainCorlay , @tacaswell.
μ΄κ²μ μλνλ κ² κ°μ§λ§ λ λμ λ°©λ²μ λν μ루μ μ΄ μλ μ¬λμ΄ μμ΅λκΉ?
import matplotlib.pyplot as plt
from ipywidgets import interact
from ipykernel.pylab.backend_inline import flush_figures
%matplotlib inline
x = [1,2,5,4,3]
@interact(n=(2,5))
def f(n):
plt.plot(x[:n])
flush_figures()
μΈλΌμΈ mpl λ°±μλμμ μμ ν CC @minrk .
μ°λ¦¬κ° ν μ μλ μΌμ λ³λ‘ μλ€κ³ μκ°ν©λλ€.
κ·Έλ¦Όμ νμνκΈ° μν΄ μ΄λ€ ν΄λ¦¬μ€ν±μ μ¬μ©νμκ² μ΅λκΉ? λ§μ μ½λ μ¬μ¬μ© μμΉλ§νΌ λͺ¨λ μμΉ μ λ°μ΄νΈλ₯Ό ν μλ μμ§λ§ μ λλ©μ΄μ μ΄ μλ κ²μ΄ μΌλ°μ μ λλ€.
κ° μμ
ν νλ¬μν νΉμ μΌμ΄μ€ @interact
?
κ° μμ νμ νλ¬μν νΉμ μΌμ΄μ€ @interact ?
μ’μ μ§μ , μ μ κ°μ¬ν©λλ€. (matplotlibμ λν νΉλ³ν κ²½μ° νλμ νΉμ λ°±μλμ λν΄) κ·Έκ²μ μννλ κ²μ΄ λ§€μ° κΉ¨λνλ€κ³ ββλκ»΄μ§μ§ μμ΅λλ€. μλ§λ μμ μμ κ°μ΄ μ¬μ©μκ° λͺ μμ μΌλ‘ μΆλ ₯μ νλ¬μνλ κ²μ΄ ν° λ¬Έμ μΈμ§ νμΈνκΈ° μν΄ κΈ°λ€λ¦΄ κ²μ λλ€. λ΄ λ§μ, λͺ μμ μΈ κ²μ΄ μμμ μΈ κ²λ³΄λ€ λ«κ³ κ·Έ λͺ¨λ κ²μ΄...
νΈμ§: μμ½νμλ©΄, μ λ μ°λ¦¬κ° ν μ μλ(λλ ν΄μΌ νλ) κ²μ΄ λ§μ§ μλ€λ λ° λμνλ€κ³ μκ°ν©λλ€...
μ΄κ²μ λ΄κ° μκ°νλ κ²λ³΄λ€ ν¨μ¬ μ½λ€λ κ²μ΄ λ°νμ‘μ΅λλ€. μ κ° μ΄κ²μ λ μΌμ° ν μ€νΈνλ €κ³ νμ λ μ κ° λκ° μλͺ»ν κ²μ΄ νλ¦Όμμ΅λλ€. μ°λ¦¬λ flush_figuresλ₯Ό νΈμΆν νμκ° μμ΅λλ€. νμ€ plt.showλ₯Ό νΈμΆνλ κ²μΌλ‘ μΆ©λΆν©λλ€:
import matplotlib.pyplot as plt
from ipywidgets import interact
%matplotlib inline
x = [1,2,5,4,3]
@interact(n=(2,5))
def f(n):
plt.plot(x[:n])
plt.show()
μ¬λλ€μκ² μνΈ μμ©μ show() λͺ λ Ήμ μ½μ νλλ‘ μμ²νλ κ²μ΄ λ§€μ° ν©λ¦¬μ μ΄λΌκ³ μκ°νλ―λ‘ μ΄λ₯Ό λ«μ΅λλ€.
μ΄ λμ(λ° λ€λ₯Έ μ μ¬μ μΈ μ¬ν μ€ν μΆλ ₯)μ μ μ§νλ €λ©΄ μΆλ ₯ μΊ‘μ²κ° μλ£λκΈ° μ μ μνΈ μμ©μμ μ¬ν X νν¬λ₯Ό λͺ μμ μΌλ‘ νΈμΆν μ μμ΅λκΉ? μΌλ°μ μΌλ‘ μνΈ μμ©μ ν΅ν΄ ν¨μλ₯Ό νΈμΆνλ κ²μ λν λμ κΈ°λλ λ§μΉ λ΄κ° μ μμ ν λ² ν¨μλ₯Ό νΈμΆν κ²κ³Ό μ νν λμΌνκ² μλνλ€λ κ²μ λλ€.
'λνν' matplotlibλ μΌλ°μ μΌλ‘ plt.showκ° λΆνμνλ€λ κ²μ μλ―ΈνκΈ° λλ¬Έμ μ¬λλ€μ΄ matplotlibμ μνΈ μμ©νλ λͺ¨λ μμ μ λλΌ κ·Έλ¦Ό νμλ₯Ό μ€μ§ν κ²μΌλ‘ μμν©λλ€. λνν ν¨μμ λ£μ΄λ μλ§ λ°λμ§ ββμμ κ²μ λλ€.
IOThreadκ° λμ
λκΈ° μ μ μΆλ ₯μ 보기 μν΄ sys.stdout.flush()
κ° νμνλ κ²μ μ½κ° μκΈ°μν΅λλ€. μΌμ΄ μ΄λ»κ² μλνλμ§ μκ°ν λ μ κ·Έκ²μ΄ νμνμ§ μ΄ν΄κ° λμμ§λ§ μ¬λλ€μ΄ κΈ°λνλ λλ‘ νλνμ§ μμκΈ° λλ¬Έμ κ·Έκ²μ΄ λ λλΌμ΄ κ²μ μλλλ€.
λλ μ°λ¦¬κ° λͺ¨λ μ¬ν μ€ν νΈλ€λ¬λ₯Ό μλμΌλ‘ μ€νν΄μΌ νλ€κ³ μκ°νμ§ μμ΅λλ€. flush_display
νν¬λ₯Ό κ°λ κ²μ μ΄λ»μ΅λκΉ? μνΈ μμ©μ μμνκΈ° μ μ νλ¬μνκ³ μ’
λ£ μ§μ μ λ€μ νλ¬μν©λλ€. κ·Έλ κ² νλ©΄ stdout/stdinμ νλ¬μνλ κ²κ³Ό μ νν μ μ¬ν©λλ€.
κΈμ, λλ λ€λ₯Έ ννΈμΌλ‘, μ°λ¦¬κ° μ€μ λ‘ λ¨μΌ μ μ²λΌ μλνλ μνΈ μμ©μ μκ°νλ€λ©΄ μ¬ν μ€νμ΄λΌκ³ λΆλ₯΄λ κ²μ΄ ν©λ¦¬μ μΌ μ μμ΅λλ€. κ·Έλ¬λ μνΈ μμ©μ΄ λ€λ₯Έ νλͺ©κ³Ό ν¨κ» μ μ μλ κ²½μ°λ₯Ό λλΉνμ¬ μνΈ μμ©μ΄ μ€ν λκΈ° μ κ³Ό νμ μ€ν ν νΈμΆμ μν κ²μ λλ€.
λνκ° μμ§ λλμ§ μμκΈ° λλ¬Έμ μ¬κ°ν©λλ€...
λλ flush_display νν¬μ μμ΄λμ΄λ₯Ό μ’μνκ³ μ΄λ‘ μ μΌλ‘ μλν κ²μ λλ€. κ·Έλ¬λ μ νν¬λ₯Ό μ μνκ³ λ°±μλλ₯Ό μ¬μ©νλλ‘ μ ννλ €λ©΄ ipythonκ³Ό ipykernel λ° ipywidgetμ μ‘°μ λ 릴리μ€κ° νμν©λλ€.
μνΈ μμ©μ΄ μ€μ λ‘ λ¨μΌ μΈν¬μ²λΌ μλνλ€κ³ μκ°νλ©΄
λλ μ΄κ²μ΄ κ·Έλ€μ ν΅μ¬μ΄λΌκ³ μκ°νκ³ κ·Έκ²μ ν° 'λ§μ½'μ λλ€. λ΄κ° μκ°νλ λ°©μμ΄μ§λ§ (μμ§) λλ λͺ¨λ μ¬λμ΄ μλλλ€.
f μ°λ¦¬λ μ€μ λ‘ λ¨μΌ μΈν¬μ²λΌ μλνλ μνΈ μμ©μ μκ°ν©λλ€.
λλ μ΄κ²μ΄ κ·Έλ€μ ν΅μ¬μ΄λΌκ³ μκ°νκ³ κ·Έκ²μ ν° 'λ§μ½'μ λλ€. λ΄κ° μκ°νλ λ°©μμ΄μ§λ§ (μμ§) λλ λͺ¨λ μ¬λμ΄ μλλλ€.
μ΄κ²μ λν΄ νΌλμ€λ¬μ΄ μ μ μ½λκ° μλ μ μ΄ μκ³ μνΈ μμ©μ΄ μ€νλκ³ μ½λκ° λͺ κ° λ μμΌλ©΄ μ μ΄ μ€μ λ‘ μΈ κ°μ μ μ²λΌ μ€νλλ€λ κ²μ λλ€(μ¦, μ¬ν μ€νμ΄ μΈ λ² λ€λ₯Έ κ²½μ°). κ·Έλ° κ²½μ°μλ flush_displayκ° λ ν©λ¦¬μ μ΄λΌκ³ μκ°ν©λλ€.
μΆκ° μ§λ¬Έ: JLabμμ λ―Έλ¬λ§λ μΆλ ₯μ΄ μλν©λκΉ?
@willingc μμ ―μ λ―Έλ¬λ§λ μΆλ ₯κ³Ό ν¨κ» μλν©λλ€.
@SylvainCorlay λλ κ·Έλ€μ΄ μ§κΈ μλ
μμ μ£μ‘ν©λλ€.
μ₯κΈ°μ μΌλ‘ λ μ μλν΄μΌ νλ μ κ·Ό λ°©μμ matplotlibμ λν ipympl μμ ― λ°±μλλΌκ³ μκ°ν©λλ€.
κ·Έλ¬λ μ΄ λͺ¨λ κ²μ conf.d λ±μΌλ‘ λ μ½κ² μ€μΉν΄μΌ ν©λλ€.
μ, λ―Έλ¬λ§λ μΆλ ₯μ μμμ μ€λͺ ν λ³κ²½ μ¬νκ³Ό ν¨κ» μλν΄μΌ ν©λλ€. νμΈν΄μ£Όμ μ κ°μ¬ν©λλ€!
μ΄κ²μ λν΄ νΌλμ€λ¬μ΄ μ μ μ½λκ° μλ μ μ΄ μκ³ μνΈ μμ©μ΄ μ€νλκ³ μ½λκ° λͺ κ° λ μμΌλ©΄ μ μ΄ μ€μ λ‘ μΈ κ°μ μ μ²λΌ μ€νλλ€λ κ²μ λλ€(μ¦, μ¬ν μ€νμ΄ μΈ λ² λ€λ₯Έ κ²½μ°).
μ¬μ€, κ·Έκ²μ μ‘°κΈ μ΄μν κ²μ
λλ€. κ·Έλλ 2λ²μ μλκ² μ£ ? νλλ μ
μ 체λ₯Ό μν κ²μ΄κ³ λ€λ₯Έ νλλ μνΈ μμ©μ 첫 λ²μ§Έ νΈμΆμ μν κ²μ
λκΉ? μκ°νλ λ°©μμ λ°λΌ μ΄κ²λ μλ―Έκ° μμ΅λλ€. @interact
λ₯Ό μ¬μ©νλ©΄ μ μΈμ λν μ€νκ³Ό μνΈ μμ©νλ ν¨μμ 첫 λ²μ§Έ νΈμΆμ λν μ€νμ΄λΌλ λ κ°μ§ μ€νμ΄ μμ΅λλ€.
μλ₯Ό λ€μ΄ @interact_manual
λ₯Ό μ¬μ©νλ€λ©΄ λ μ΄μμ΄ μμ κ²μ΄λΌκ³ μκ°ν©λλ€(νμ€νμ§ μμ).
κ·Έλλ 2λ²μ μλκ² μ£ ? νλλ μ μ 체λ₯Ό μν κ²μ΄κ³ λ€λ₯Έ νλλ μνΈ μμ©μ 첫 λ²μ§Έ νΈμΆμ μν κ²μ λκΉ?
λ€μ μ½λλ₯Ό κ³ λ €νμμμ€.
plt.plot([1,2,3])
@interact(n=(1,10))
def f(n):
plt.plot([1,n])
plt.plot([4,5,6])
νλ‘ν μ λμ λλ―λ‘ μνΈ μμ©μ μ체μ μΌλ‘ λ³λμ μ λ‘ μ²λ¦¬νλ €λ©΄ μνΈ μμ©μ΄ μ€νλκΈ° μ μ Figureλ₯Ό νλ¬μνκ³ μνΈ μμ© λ΄λΆμ Figureλ₯Ό νλ¬μν λ€μ μ λμμ λ€μ ν λ² νλ¬μν΄μΌ ν©λλ€. μ΄κ²μ μ°λ¦¬κ° stdoutμ νλ¬μνλ κ²κ³Ό μ νν μΌμΉν©λλ€.
μ¬μ€ μμ μμμ μ¬μ©μκ° λ¬΄μμ κΈ°λνλμ§ μ λͺ¨λ₯΄κ² μ΅λλ€. 무μμ κΈ°λνκ² μ΅λκΉ?
μκ°ν΄λ³΄λ©΄ μμ μλ κ·Έλ€μ§ λ
Όλ¦¬μ μ΄μ§ μμ΅λλ€. κ°μΈμ μΌλ‘ νλμ νλ‘―λ§ λμ μΌλ‘ λ³κ²½λλ μΈ κ°μ νλ‘―μ μμνμ§λ§ μ΄μ κ°μ μμ
μ μννλ €λ©΄ @interact
λ΄λΆμ λͺ¨λ νλ‘― νΈμΆμ μνν©λλ€.
μ΄λ€ μ΄μ λ‘ μ νλ₯Όνμ§ κ±°κΈ°μ flush_figures
κ° ν .plot()
?
@myyc μ΄λ νλμ μλ―Έ μλ μ€μν λ³νμ
λλ€. plot
λ νλ‘―μ νλͺ©μ μΆκ°ν©λλ€....
matplotlibμ λ¬λ¦¬ νΉμ ipython
μΈλΌμΈ λμμ μλ―Ένμ΅λλ€.
νΈμ§ : μμμ μ€λͺ ν κ²½μ°μ λ¬λ¦¬ "μ μΌν νλ‘ν κΈ°λ₯"μΌλ‘ μ λΉ νλμ μνΈ μμ©μ κ°λ κ²μ΄ λ μΌλ°μ μΈ μ¬μ© μ¬λ‘λΌκ³ νμ ν©λλ€ ...
μ΄ν΄ νμ΄μ. λλ μ΄κ²μ΄ κ·Έλ κ² λ€λ₯Έ νλμ κ°μ ΈμΌνλ€κ³ μκ°νμ§ μμ§λ§.
λ―Έλμ μ μ ν μ κ·Ό λ°©μμ μλ§λ λ ΈνΈλΆ λ°±μλ λλ ipymplμ μ¬μ©νκ³ κ·Έλ¦Όμ νΈμ§νλ κ²μ λλ€.
ipywidgetsμ μνΈ μμ©μμ μΈλΌμΈ λ°±μλμ λν matplotlib κ΄λ ¨ ν΄κ²° λ°©λ²μ ꡬννλ κ²μ΄ μ³μ§ μμ κ² κ°μ΅λλ€.
jasonμ΄ μ 곡ν μ½λμμ:
plt.plot([1,2,3])
@interact(n=(1,10))
def f(n):
plt.plot([1,n])
plt.plot([4,5,6])
μμ μΆλ ₯μ λΌμΈμ΄ λ§μ κ·Έλ¦Όμ λλ€..
μ, μ μ μΌλ‘ λμν©λλ€. λ΄ λ‘컬 μ€μ μμ "μμ λκΈ° μ€"μ΄λΌλ λ°©μμΌλ‘ μμλ‘ μμ νμ΅λλ€(ν¬λ νλ‘ν
λ°©λ² λ¬΄μ)
μ΄ λ¬Έμ κ° λ€μν github νλ‘μ νΈμμ λ°μ‘λλ κ²μ 보μμΌλ―λ‘ μ΅μμ ν΄κ²° κ²½λ‘κ° λ¬΄μμΈμ§ κΆκΈν©λλ€.
νΈμ§ : κ·Έλ λ€λ©΄ λ λͺ μμ μΌλ‘ μ΄λ κ² μμ±νμ§ μκ² μ΅λκΉ?
@interact(n=(1,10))
def f(n):
plt.plot([1,2,3])
plt.plot([1,n])
plt.plot([4,5,6])
matplotlib μμ ―μΈ ipympl ν¨ν€μ§(https://github.com/matplotlib/jupyter-matplotlib)λ₯Ό νμΈν μ μμ΅λλ€. ipymplμ μμ§ μ΄κΈ° λ¨κ³μ΄μ§λ§ matplotlib μ½μ΄λ³΄λ€ λ¦΄λ¦¬μ€ μΌμ μ΄ λ λΉ¨λΌμΌ νκ³ jupyterlab λ±μ λ μΌμ° μ§μν΄μΌ ν©λλ€...
νμΈμ 무μκ° λμ°ν μμ΄λμ΄λΌλ κ²μ΄ λ°νμ‘μ΅λλ€. μ μ€νΈλ¦Όμμ μμ μ κΈ°λνκ² μ΅λλ€ :)
κ΅μ‘λ°μ§ λͺ»ν μ¬μ©μ κ΄μ μ κΈ°μ¬νκΈ° μν΄: ipywidgets 6.0μΌλ‘ μ
λ°μ΄νΈν ν μμ ― μ½λμ λλΆλΆμ΄ μλνμ§ μλ κ²μ λ°κ²¬νμ΅λλ€(μ¬κΈ°μμ λ
Όμλ λ¬Έμ λ‘ μΈν΄). plt.show()
νΈμΆμ μΆκ°νμ¬ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμμ§λ§ μ΄λ¬ν νΈμΆμ μΆκ°νλ μμΉμ λν΄ λ§€μ° μ£Όμν΄μΌ νλ€λ κ²λ μκ² λμμ΅λλ€. λλλ‘ μ΄κ²μ λ무 빨리 νΈμΆνλ©΄ λμ€μ νλ‘―μ΄ λνλμ§ μλ κ² κ°μ΅λλ€( plt.show()
κ° λ€μ νΈμΆλλλΌλ). λλ μ΄κ²μ μ΅μνμ μλ₯Ό λ§λ€ λ§νΌ μΆ©λΆν μ°Ύμλ΄μ§ μμμ§λ§ νμ¬ λμμ λμκ² μ§κ΄μ μ΄μ§ μμ κ²μ²λΌ 보μ
λλ€. λλ κ·Έκ²μ νΌνκΈ° μν΄ μνμ°©μ€λ₯Ό ν΅ν΄ νλ‘κ·Έλλ°νκ³ μμ΅λλ€.
ipywidgetsμ μ νν λ³κ²½μ μ€μ λ‘ μλ‘μ΄ λμμ μΌμΌμΌ°μ΅λκΉ? μ€ν ν νν¬κ° μ ν νΈμΆλμ§ μμ΅λκΉ, μλλ©΄ μ¬μ ν νΈμΆλμ§λ§ μμ ―μ΄ μμ ν μΆλ ₯μ λν΄ μμ ―μ΄ νΉμ λκΈ° λλ¬Έμ μΆλ ₯μ΄ μ΄μ μμ λ©λκΉ? νμμ κ²½μ° μΊ‘μ²λ μΆλ ₯μ ν¨μ λ³Έλ¬Έ μ€μ 격리νλ κ²μ΄ μ¬λ°λ₯Έ μΌμ΄ μλ κ²μ²λΌ 보μ λλ€.
μ€ν ν νν¬κ° νΈμΆλκ³ μμ΅λλ€(νμ€ν©λλ€).
import matplotlib.pyplot as plt
from ipywidgets import interact
%matplotlib inline
@interact(n=(0,10))
def f(n):
plt.plot([0,n])
μ¬λΌμ΄λλ₯Ό μ΄λν©λλ€. νλ‘―μ΄ μ μ μΆκ°λ©λλ€. μ¬ν μ€ν νν¬κ° νμ λ°μ΄ν° λ©μμ§λ₯Ό μ μ‘ν©λλ€. μνΈ μμ© μ€νμ μ€μ λ‘ ν¨μ νΈμΆ μ€μ λ°μνλ μΆλ ₯ μΊ‘μ²μλ§ νΉνλμ΄ μμ΅λλ€. λλ κ·Έκ²μ΄ μ³μ μΌμ΄λΌκ³ μκ°νλ€. μλ₯Ό λ€μ΄ λ κ°μ μλ‘ λ€λ₯Έ μνΈ μμ©μ΄ μμ ν λμΌν μ¬λΌμ΄λ μΈμ€ν΄μ€λ₯Ό 곡μ ν μ μμ΅λλ€.
import matplotlib.pyplot as plt
from ipywidgets import interact, IntSlider
%matplotlib inline
x = IntSlider()
@interact(n=x)
def f(n):
plt.plot([0,n])
plt.show()
@interact(n=x)
def f(n):
plt.plot([0,n,0,n])
plt.show()
λ¨μΌ μ¬λΌμ΄λκ° μ‘°μ λλ©΄(μ΄λ UIμμλ ) λ μνΈ μμ© λͺ¨λ μ¬λΌμ΄λκ° μμ§μ΄λ κ²μ 보μ¬μ£Όκ³ λ μνΈ μμ© κΈ°λ₯μ΄ λμΌν μ€ν νΈμΆμμ μ€νλ©λλ€. λ μνΈ μμ©μ΄ μ¬ν μ€ν νν¬μμ μΆλ ₯μ μΊ‘μ²νλ €κ³ μλνλ κ²μ μλͺ»λ κ²μ λλ€. λλ μ¬κΈ°μ κ²°μ μ΄ μΆλ ₯μ μμ±νκΈ° μν΄ μ¬ν μ€νμ μ¬μ©νκ³ μλ€λ κ²μΈλ°, κ·Έκ²μ λ무 κ±°μΉ λ§μΉλΌκ³ μκ°ν©λλ€. λ¨μΌ μ€νμμ μ¬λ¬ λ² νΈμΆλ μ μλ μ½λ λΈλ‘μμ μμ±λ μΆλ ₯μ νλ¬μνκΈ° μν λ³΄λ€ μΈλΆνλ λ©μλκ° μμ΄μΌ ν©λλ€.
μ½λ λΈλ‘μμ μμ±λ μΆλ ₯μ νλ¬μνκΈ° μν λ³΄λ€ μΈλΆνλ λ°©λ²μ΄ μμ΄μΌ ν©λλ€.
matplotlib νλ‘ν
μ κ²½μ° μ΄ νλ¬μ±μ plt.show
μνν λ λ°μν©λλ€.
μ΄λ¬ν νΈμΆμ μΆκ°νλ μμΉμ λν΄ λ§€μ° μ£Όμν΄μΌ ν©λλ€. λλλ‘ μ΄κ²μ λ무 빨리 νΈμΆνλ©΄ λμ€μ νλ‘―μ΄ λνλμ§ μλ κ² κ°μ΅λλ€.
λλ μ΄λ° μΌμ΄ μΌμ΄λλ μλ₯Ό 보λ λ° μ λ§λ‘ κ΄μ¬μ΄ μμ΅λλ€. μ°λ¦¬λ λμμ μ§κ΄μ μ΄κ³ μ΄ν΄ν μ μλλ‘ λ§λ€κ³ μΆμ΅λλ€.
μ΄λ¬ν νΈμΆμ μΆκ°νλ μμΉμ λν΄ λ§€μ° μ£Όμν΄μΌ ν©λλ€. λλλ‘ μ΄κ²μ λ무 빨리 νΈμΆνλ©΄ λμ€μ νλ‘―μ΄ λνλμ§ μλ κ² κ°μ΅λλ€.
λλ μ΄λ° μΌμ΄ μΌμ΄λλ μλ₯Ό 보λ λ° μ λ§λ‘ κ΄μ¬μ΄ μμ΅λλ€. μ°λ¦¬λ λμμ μ§κ΄μ μ΄κ³ μ΄ν΄ν μ μλλ‘ λ§λ€κ³ μΆμ΅λλ€.
μμΈν μ€λͺ
νμλ©΄ νλ‘ν
μ μννλ μνΈ μμ© ν¨μμ λ§μ§λ§ μ€μ plt.show()
λ₯Ό μΆκ°νλ κ²λ§μΌλ‘λ μ΄μ λμκ³Ό λμΌν κ²°κ³Όλ₯Ό μ»μ μ μλ€κ³ μκ° ν©λλ€. λλ μ΄κ²μ΄ μλνμ§ μλ μλ₯Ό 보λ λ° λ§€μ° κ΄μ¬μ΄ μμ΅λλ€.
@jasongrout λ΄ μ£Όμ μ κ°μ¬ν©λλ€. λ΄κ° μ΄κ²μ μΉλ μ½λλ λ€μ 볡μ‘νλ©° λ΄κ° λ€λ₯Έ μΌμ μλͺ»νκ³ μμ μ μμ΅λλ€. λ΄κ° κ·Έκ²μ λ€μ λ³΄κ² λλ€λ©΄ λλ κ·Έκ²μ λΆλ¦¬νκ³ μλ₯Ό μ 곡νλ €κ³ λ Έλ ₯ν κ²μ΄λ€.
@jasongrout μ‘°κΈ λ νκ³ ν, λλ λ΄κ° 무μμΌλ‘ μ€ννμ΅λλ€ κ²μνμ§ μμ ―μ, Jupyter λ
ΈνΈλΆ μ체μ μμ±μ
λλ€ μκ° (νμ§λ§ μ°λ¦¬λ μ νλ₯Ό κ°μ νκ³ μκΈ° λλ¬Έμ μ§κΈμ μμ ―κ³Ό μνΈ μμ© plt.show()
).
λ
ΈνΈλΆ μ
μ νλ‘―μ λ§λ€κ³ plt.show()
νΈμΆνλ©΄ λμ€μ Figureμ λν μμ μ¬νμ΄ νμλμ§ μμ΅λλ€. λ€μμ μ΅μνμ μμ
λλ€.
%matplotlib inline
import matplotlib.pyplot as plt
def plotfun(t):
fig, ax = plt.subplots(1,1)
ax.plot([0,t],[0,t])
plt.show()
ax.plot([t,0],[0,t])
plt.show()
plotfun(2)
첫 λ²μ§Έ λΌμΈ νλ‘―λ§ λνλ©λλ€.
μ¬κΈ° λ κ°λ¨ν μκ° μμ΅λλ€. %matplotlib inline
λ°±μλκ° μλ λ κ°μ μ
. μλ§λ @tacaswell μ΄ λ λ²μ§Έ plt.show
μ μ€κ±°λ¦¬κ° νμλμ§ μλ μ΄μ λ₯Ό μ€λͺ
ν μ μμ΅λλ€.
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1,1)
ax.plot([0,1],[0,1])
plt.show()
μ€κ±°λ¦¬λ₯Ό 보μ¬μ€λλ€
ax.plot([1,0],[0,1])
plt.show()
μ무κ²λ 보μ¬μ£Όμ§ μλλ€
μ΅μ μμ μ μΈ jupyter, ipython, ipywidgets, matplotlib, python 3μΌλ‘ λ΄ μ»΄ν¨ν°μμ νμΈνμ΅λλ€.
μ¬κΈ°μλ νμΈνμ΅λλ€.
@jasongrout 첫 λ²μ§Έ μ
μμ κ·Έλ¦Ό(λ° μΊλ²μ€ λ° μΆ)μ λ§λ λ€μ νμνκΈ° λλ¬Έμ μμλλ λμμ
λλ€. κ·Έλ° λ€μ λ λ²μ§Έ μ
μμ κΈ°μ‘΄ μΆ(κΈ°μ‘΄ κ·Έλ¦Ό)μ μ μ μΆκ°ν©λλ€. %matplotlib qt
λλ ipympl
(λλ μ 체 GUI μ€ νλ)λ₯Ό μ¬μ©νλ©΄ νλ‘―μ΄ λ λ²μ§Έ μ€λ‘ _μ
λ°μ΄νΈλμ΄μΌ ν©λλ€_. ν λ²λ§ μ
λ°μ΄νΈνλ©΄ λκΈ° λλ¬Έμ μ΄κ²μ΄ μΈλΌμΈμμ μλν κ²μΌλ‘ κΈ°λνμ§ μμ΅λλ€(μ΄κ²μ΄ λ΄κ° μΈλΌμΈμ λ³λ‘ μ’μνμ§ μλ μ΄μ μ΄λ©° λνν κΈ°λ₯μ _λͺ¨λ_λ₯Ό λ²λ¦½λλ€).
@tacaswell μΈλΌμΈμ μ΄ λμμ νλμ μ μ μλ μ΄μ μμ μμλ μλ―Έκ° μμ΅λκΉ? μ¬κΈ° λ€μ μμ΅λλ€:
%matplotlib inline
import matplotlib.pyplot as plt
def plotfun(t):
fig, ax = plt.subplots(1,1)
ax.plot([0,t],[0,t])
plt.show()
ax.plot([t,0],[0,t])
plt.show()
plotfun(2)
plt.show
μμ μΈλΌμΈ λ°±μλλ μ체λ₯Ό pngλ‘ λ λλ§ν λ€μ pyplotμμ κ·Έλ¦Όμ λ±λ‘ μ·¨μνλ―λ‘ λμΌν μ
μ μλλΌλ λ€μ μΌμμ λ€μ λ λλ§λμ§ μμ΅λλ€. μΆκ° show
μμ΄ μΆ λ©μλμ λν λ€μ€ νΈμΆμ΄ μλν΄μΌ ν©λλ€.
λ€μμ μΈλΌμΈ λ°±μλ μ½λμ λλ€. https://github.com/ipython/ipykernel/blob/master/ipykernel/pylab/backend_inline.py
λνν μμ ―μ λ€μ μλμν€κΈ° μν΄ λ‘€λ°±ν μ μλ ipywidgets
λ°/λλ matplotlib
μμ΅λκΉ?
@jasongrout InlineBackend.close_figures
μ False
λ‘ μ€μ νλ €λ κ²μ²λΌ μ½λμμ 보μ
λλ€. νμ§λ§ μμ±μ μ€μ νλ λ°©λ²μ μ λͺ¨λ₯΄κ² μ΅λλ€. μΌμ’
μ λ§λ²μ μ¬μ©ν΄μΌ ν©λκΉ?
(κ·Έ μ§λ¬Έμ μκΈ°κ² λ€λ¦¬μ§λ§ λ§ κ·Έλλ‘μ λλ€)
https://github.com/jupyter-widgets/ipywidgets/issues/1457 μμ μ΄ λ¬Έμ λ₯Ό λ€μ μ κΈ°νμ΅λλ€. @ellisonbg - μμμ μΈκΈν flush_figures ν΄κ²° λ°©λ²μ ꡬννλ©΄ μ΄λ»κ² λλμ? μΈλΌμΈ mpl λ°±μλμμ μ€ν μ€μΈμ§ νμΈν΄μΌ ν μλ μμ΅λλ€.
κ·Έκ²μ κ±°λν kludgeμ§λ§ μ΄μ¨λ κ·Έκ²μ ν λ§νΌ μΆ©λΆν μ€μν μ μμ΅λλ€. μλ§λ μ°λ¦¬κ° μ€μ λ‘ Figureλ₯Ό νλ¬μνκ³ μλμ§ κ°μ§νκ³ μ¬λλ€μκ² λͺ μμ μΈ show() νΈμΆμ μννλλ‘ μμ²νλ κ²½κ³ λ₯Ό λ°νν μ μμ΅λκΉ?
μλ λͺ¨λ, λλ μ΄κ²μ κΈ°μ μ μΈλΆ μ¬νμ λ°λ₯΄μ§ μμμ§λ§ λ¬Έμ κ° λ°μνμ΅λλ€. ꡬν μΈλΆ μ¬νμ κ΄κ³μμ΄ matplotlib+interactκ° κ°λ₯ν ν "κ·Έλ₯ μλ"νλ κ²μ΄ λ§€μ° μ€μνλ€κ³ μκ°ν©λλ€.
plt.show()
λλ flush_figures()
λ₯Ό μ¬μ©νμ¬ λ
ΈνΈλΆμ μλ‘ κ³ μΉλ©΄(컀λμ λ€μ μμνμ§ μκ³ ) μμ ―κ³Ό ν¨κ» λ
ΈνΈλΆ μ μ₯μ μ¬μ©ν΄λ κ·Έλ¦Όμ΄ μ¬λΌμ§λλ€. μ΄λ¬ν μνκ° μμΌλ©΄ λ€μ€ νλ‘― μΆλ ₯ λ¬Έμ κ° μ¬μ ν μ‘΄μ¬νμ§λ§ κ·Έλ μ§ μμ΅λλ€. μ΄κ²μ μλλ κ²μ
λκΉ? 컀λμ΄ μ’
λ£λ κ²½μ°μλ λμΌνκ² μ μ©λμ§λ§ μ΄μ λ²μ μ ipywidgetμμλ κ·Έλ¦Όμ μ΅μ’
μνκ° λΉλνν νλ‘―κ³Ό μ μ¬ν λ
ΈνΈλΆμ μ μ₯λμ΄ λ§€μ° νΈλ¦¬νμ΅λλ€.
μ΄κ²μ΄ λ²μλ₯Ό λ²μ΄λκ±°λ λ΄κ° λκ°λ₯Ό μλͺ»νκ³ μλ€λ©΄ μ£μ‘ν©λλ€. ipywidgets 6.0.0, matplotlib 2.0.2, λ ΈνΈλΆ 5.0.0 λ° Python 3.6.1 μ€ν.
κ°μ₯ μ μ©ν λκΈ
μλ λͺ¨λ, λλ μ΄κ²μ κΈ°μ μ μΈλΆ μ¬νμ λ°λ₯΄μ§ μμμ§λ§ λ¬Έμ κ° λ°μνμ΅λλ€. ꡬν μΈλΆ μ¬νμ κ΄κ³μμ΄ matplotlib+interactκ° κ°λ₯ν ν "κ·Έλ₯ μλ"νλ κ²μ΄ λ§€μ° μ€μνλ€κ³ μκ°ν©λλ€.