2017-04-11 103 views
0

我在這個主題上搜索了很多,但我不是一個Web開發人員,所以我知道我錯過了一些概念。matplotlib的'webagg'後端可以與我的django網站一起工作嗎?

當我在本地運行matplotlib並指定'webagg'後端時,運行plt.show()將啓動一個輕量級web服務器,並通過完整的交互功能在我的瀏覽器中打開該圖。

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() 

我的問題是:是否有可能使用webagg後端與我的Django的網站,成爲整齊的互動matplotlib數字用戶?換句話說,我可以在我的django網站的某個地方使用上面的代碼,這樣圖表就會嵌入網頁中嗎?我知道的工具,如mpld3,這是非常酷的,但不完全重新創建matplotlib中的部件/選擇器功能)。

回答

0

有一個如何使用web_agg and Tornado嵌入交互式數字的例子。我成功地將它改爲使用Flask,但仍然使用Tornado網絡套接字。首先嚐試運行下面的例子,看看交互性對你來說是否「足夠好」。當我運行它時,響應並不是真正的超級活潑(如果你想了解更多信息,請閱讀最後一部分)。

基本上,要在網頁上實現它,您需要使用WebSocket發送/接收互動部分的消息,並在需要重新繪製時以二進制數據形式發送圖表。

下面這是相當簡單的用不同的框架/服務器使用的例子(查看上面的鏈接瞭解詳情):

  • 創建你的身材像正常。
  • 建立經理與webagg後端你的身材
  • 服務mpl.js
  • 實現的WebSocket對象,它需要send_json和send_binary功能(這些都是從webagg Python代碼調用時你WebSocket的添加到經理)
  • 在您在客戶端服務的模板中。使用javascript創建一個websocket並使用mpl.js創建一個圖形。

很好看,通過webagg github stuff(webagg_core,webagg,mpl.js,也許還有nb_agg)。我知道這不是一個完整的答案,但希望它能給你一些你需要做的方向。

位題外話關於第一段註釋:

不幸的是我新的Web開發,以確定是否響應的web_agg是如何在例如實施了限制,或者如果它取決於你的服務器/後端/線程是如何設置的。從我能看到的jupyter筆記本nb_agg後端也使用了web_agg後端的一部分,似乎在筆記本上工作得更加靈敏。但我應該另外提出一個討論這些問題的問題。

相關問題