2017-04-11 1 views
0

이 주제에 대해 많은 부분을 검색했지만 저는 웹 개발자가 아니므로 일부 개념이 누락되었음을 압니다.matplotlib의 'webagg'백엔드가 내 django 사이트에서 작동 할 수 있습니까?

로컬로 matplotlib을 실행하고 'webagg'백엔드를 지정할 때 plt.show()를 실행하면 경량 웹 서버가 시작되고 브라우저에서 전체 대화 형 기능으로 플롯을 엽니 다.

import matplotlib as mpl 
mpl.use('webagg') 
from matplotlib import pyplot as plt 
import numpy as np 

f,ax = plt.subplots(1) 
ydata = np.random.randint(0,100,100) 
xdata = np.linspace(1,100,100) 
ax.plot(xdata,ydata,picker=5) 
ax.set_title('Click the line to change the color') 

def onpick(event): 
    event.artist.set_color('red') 

    f.canvas.draw_idle() 
f.canvas.mpl_connect('pick_event', onpick) 

plt.show() 

내 질문은 : 그것은 사용자에게 깔끔한 대화하기 matplotlib 수치를 제공하기 위해 내 장고 웹 사이트로 webagg 백엔드를 사용할 수 있습니까? 즉, 내 장고 사이트 어딘가에서 위 코드를 사용하여 플롯이 웹 페이지에 포함되도록 할 수 있습니까?

(나는 mpld3과 같은 도구에 대해 알고 있지만 매우 멋지지만 matplotlib에서 위젯/선택기 기능을 완전히 다시 작성하지는 않습니다.)

답변

0

web_agg and Tornado을 사용하여 대화식 그림을 삽입하는 방법의 한 예가 있습니다. 플라스크 사용으로 성공적으로 바꿨지 만 여전히 토네이도 웹 소켓을 사용하고 있습니다. 먼저 아래 예제를 실행 해보고 인터랙션이 '충분히 좋다'는 것을 확인하십시오. 내가 그것을 달렸을 때, 응답은 정말로 매우 건강하지 않다 (당신이 이것에 관한 더 많은 정보를 원하면 마지막 부분을 읽는다).

기본적으로 웹 페이지에서 구현하려면 websocket을 사용하여 대화식 부분에 메시지를 보내고받으며 다시 그려야하는 경우 이진 데이터로 플롯을 보냅니다. 그것은 아주 정직하고 다른 프레임 워크/서버와 함께 사용하는 것입니다 예 (자세한 내용은 위의 링크를 확인)에 따라

:

  • 정상처럼 그림을 만들 수 있습니다.
  • 는 웹 소켓 객체를 구현하는 mpl.js를 제공 webagg 백엔드와 그림에 대한 관리자를 만들, 당신이에 웹 소켓을 추가 할 때, 이들을 webagg 파이썬 코드에서 호출 send_json 및 send_binary 기능을 (필요 관리자)
  • 을 클라이언트 측에서 제공합니다. 자바 스크립트를 사용하여 websocket을 만들고 mpl.js를 사용하여 그림을 만듭니다.

webagg github stuff (webagg_core, webagg, mpl.js, 아마도 nb_agg)을 살펴 보는 것이 좋습니다. 나는 이것이 완전한 대답이 아니라는 것을 알고 있습니다. 그러나 바라건대 그것은 당신에게 당신이해야 할 일에 대해 어떤 방향을 제시합니다.

비트 주제에서 벗어난 첫 번째 단락에서 주석에 대한 :

불행하게도 나는 응답이 web_agg이 예에서 구현되는 방법에 대한 제한이 있는지 확인하려면 웹 개발에 새로운 오전, 또는 경우 서버/백엔드/스레딩 설정 방법에 따라 다릅니다. 내가 볼 수있는 것에서는 jupyter 노트북 nb_agg 백엔드도 web_agg 백엔드의 일부를 사용하며 노트북에서 훨씬 더 반응 적으로 작동하는 것으로 보입니다. 하지만 아마도 이러한 문제를 논의하는 별도의 질문을해야합니다.

관련 문제