What’s easiest way to get Python script output on the web?
和
Matplotlib: interactive plot on a web server
但没有一个使用d3.js,我不认为他们达到相同的交互性水平.
所以我是d3.js的新手,坦白说,在这个例子中我应该从哪里开始.
项目流程:
>在前端询问用户名.发送给后端python
>通过Python调用第三方网站API,获取深度为x的图形数据(对象边缘),其中x是距离起始节点的距离
>运行一些机器学习数据(python)
>在d3.js中显示一些数字(可能在右下角)
循环:
>有一个交互式d3.js图表,如果我点击一个节点,它将重做计算作为起始节点
>这样做,以便d3.js显示每个节点的文本的一部分(前10个字符),然后在鼠标悬停后显示全文.
(7)奖金更新嵌入图片?像那些个人资料签名?
问题:
我如何实现这种双向沟通?
我应该从哪里开始?
有没有更好的方法可以做到这一点?
Sidenote:我打算使用Google App Engine来完成这个项目,不知道是否允许你将它用作“vm”.
谢谢!
编辑:这看起来很像Python at backend JS at frontend integration,但我不知道甚至开始,我认为他们提出了更多的以艺术为导向的工具,因为他的项目.
解决方法
>以JSON格式将您的图形数据发布到您的Web服务
>做处理服务器端
>将JSON表示处理结果给客户端
>用d3.js渲染它
>客户端上的用户交互创建一个新的或修改的数据结构
>返回步骤1
也许您的服务器端Web服务方法看起来像这样(这是基于web.py的伪代码):
import simplejson class ml(object): def POST(self,data=None): # turn the JSON string into a Python data structure d = simplejson.loads(data) # do stuff results = alter_data(d) web.header('Content-Type','application/json') # send JSON back to the client return simplejson.dumps(results)
而您的客户端代码可能看起来像这样(再次,只是一个粗略的草图).这个例子假设你使用jQuery来做AJAX的东西.
function render(data,textStatus) { d3 .select('svg') .selectAll('circle') .data(data) .enter() .append('circle') .on('click',function() { $.getJSON( 'your_webservice_url',// POST an updated data structure to your service { 'data' : alter_data(data) },// Call the render method again when new data is received render); }); }
d3.js’enter
和exit
方法使您的数据的视觉表示更新变得非常简单.我建议您阅读文档.
This example可能会给你一些关于如何用JSON表示图形数据的想法,以及如何渲染图形数据.
查看on
方法,了解如何在单击某个节点时触发POST到您的Web服务.
我将跳过真正具体的东西,比如用d3.js显示文字.我相信你可以通过阅读d3.js documentation找出如何做到这一点.