D3.js前端和Python后端之间的双向流? /互动图表在网站

前端之家收集整理的这篇文章主要介绍了D3.js前端和Python后端之间的双向流? /互动图表在网站前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以这有点类似

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,但我不知道甚至开始,我认为他们提出了更多的以艺术为导向的工具,因为他的项目.

解决方法

这听起来像您需要在Python中编写一个使用并返回 JSON的Web服务.我不知道数据是否源自客户端或服务器,所以在这个例子中,我假定它来自客户机.

>以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’enterexit方法使您的数据的视觉表示更新变得非常简单.我建议您阅读文档.

This example可能会给你一些关于如何用JSON表示图形数据的想法,以及如何渲染图形数据.

查看on方法,了解如何在单击某个节点时触发POST到您的Web服务.

我将跳过真正具体的东西,比如用d3.js显示文字.我相信你可以通过阅读d3.js documentation找出如何做到这一点.

猜你在找的JavaScript相关文章