2017-04-11 104 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后端的一部分,似乎在笔记本上工作得更加灵敏。但我应该另外提出一个讨论这些问题的问题。

相关问题