2017-12-18 29 views
0

Jupyter를 사용 중이고 플롯을 대화 형으로 만들려고합니다.Jupyter : 버튼을 클릭하여 플롯을 업데이트하는 방법 (ipywidgets)

그래서 나는 음모가 있습니다. ipywidgets 버튼이 있습니다.

버튼 클릭시 슬라이더와 상호 작용하는 것처럼 플롯을 업데이트해야합니다.

하지만 그렇게 할 수는 없습니다.

matplotlib에서 '노트북'백엔드를 사용하는 경우에만 작동하지만 끔찍한 것처럼 보입니다. 동시에 상호 작용은 모든 종류의 플롯과 작동합니다. 상호 작용을 사용하지 않고 이것을 재현 할 수있는 방법이 있습니까?

#this works fine! But toolbar near the graph is terible 
#%matplotlib notebook 

#this does not work 
%matplotlib inline 

from matplotlib.pyplot import * 
button = ipywidgets.Button(description="Button") 

def on_button_clicked(b): 
    ax.plot([1,2],[2,1]) 

button.on_click(on_button_clicked) 

display(button) 

ax = gca() 
ax.plot([1,2],[1,2]) 
show() 
+0

나는 인라인 백엔드 인터랙티브로 matplotlib (또는 seaborn)을 만들기 위해 생각한 모든 것을 시도했다. – AHA

+0

예 :(현재 Jupyter는 대화 형 응용 프로그램을 사용할 때 Jupyter의 사용이 매우 제한적으로 보입니다.) –

답변

0

해결 방법으로 전체 플롯을 출력 위젯에 다시 칠한 다음 깜박임없이 표시 할 수 있습니다.

%matplotlib inline 

from matplotlib.pyplot import * 

button = ipywidgets.Button(description="Button") 
out = ipywidgets.Output() 

def on_button_clicked(b): 
    with out: 
     clear_output(True) 
     plot([1,2],[2,1]) 
     show() 

button.on_click(on_button_clicked) 

display(button) 

with out: 
    plot([1,2],[1,2]) 
    show() 

out 
+0

인라인 백엔드가있는 플롯이 PNG 이미지 이외에 아무것도 아닌 사실을 알고 있는지 궁금합니다. 새로운 PNG 이미지를 생성하고 이전 이미지를 대체 할 수있는 한 가지 방법 일뿐입니다. 플롯 내에서 진정한 상호 작용을 위해서는 인라인 백엔드가 선택 방법이 아니므로 사람들은 일반적으로 노트북 백엔드를 사용합니다 – ImportanceOfBeingErnest

+0

그래, 괜찮아. 그게 내가 뭘 하려던거야 - 버튼 클릭만으로 모든 것을 다시 쓸 수 있기 때문에 출력 위젯이 핵심이다.하지만 여전히 대화식 플롯을 보이지 않는 이유는 무엇인지 알 수 없다. 왜 우리는 끔찍한 캡션과 쓸모없는 툴바가 필요합니까? –

+0

캡션은 디자인 선택입니다. 모든 사람들이 좋아할 필요는 없습니다. 툴바는 쓸모가 없으며, 상호 작용하는 열쇠입니다. 음모. 결국 matplotlib 노트북 출력을 원하는 모양으로 만드는 방법을 묻습니다. 그것은 다른 질문 일 수 있습니다.이 질문에 대해 조사하고 잠재적으로 새로운 질문을 할 수 있습니다. – ImportanceOfBeingErnest