Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 借助人力车和d3.js在折线图上绘制实时数据_Javascript_Jquery_Ajax_D3.js - Fatal编程技术网

Javascript 借助人力车和d3.js在折线图上绘制实时数据

Javascript 借助人力车和d3.js在折线图上绘制实时数据,javascript,jquery,ajax,d3.js,Javascript,Jquery,Ajax,D3.js,我想在rickshaw和d3.js的帮助下在折线图上制作实时动态图形,它总是提供新的数据,而不会刷新整个页面。在下面的示例中,它们基于随机数据构建图形。但在这个问题中,数据不是新鲜的,只有刷新浏览器才能得到新鲜的数据。对于ajax请求,我在这里使用参考 我复制了下面的全部代码。我想制作一个可移动的图形,像实时更新一样,但不想使用flot,而是人力车 <!doctype> <head> <title>rickShaw greaph exa

我想在rickshaw和d3.js的帮助下在折线图上制作实时动态图形,它总是提供新的数据,而不会刷新整个页面。在下面的示例中,它们基于随机数据构建图形。但在这个问题中,数据不是新鲜的,只有刷新浏览器才能得到新鲜的数据。对于ajax请求,我在这里使用参考

我复制了下面的全部代码。我想制作一个可移动的图形,像实时更新一样,但不想使用flot,而是人力车

    <!doctype>
<head>
        <title>rickShaw greaph examples</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link type="text/css" rel="stylesheet" href="../src/css/graph.css">
        <link type="text/css" rel="stylesheet" href="../src/css/legend.css">
        <link type="text/css" rel="stylesheet" href="../src/css/detail.css">
    <link type="text/css" rel="stylesheet" href="css/lines.css">

    <script src="../vendor/d3.v3.js"></script>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>

    <script src="../rickshaw.js"></script>
</head>
<body>

<div id="chart_container" style="margin:0px auto;width:660px;">
    <div id="chart"></div>
        <div id="legend_container">
            <div id="smoother" title="Smoothing"></div>
            <div id="legend"></div>
        </div>
        <div id="slider"></div>
</div>

<script>
       // set up our data series with 50 random data points
        var seriesData = [ [], [], [] ];
        var random = new Rickshaw.Fixtures.RandomData(150);

        for (var i = 0; i < 150; i++) {
            random.addData(seriesData);
        }

var ajaxGraph = new Rickshaw.Graph.Ajax( {

    element: document.getElementById("chart"),
    width: 400,
    height: 200,
    renderer: 'line',
    series: [
        {
            name: 'New York',
                        data: seriesData[0],
            color: '#c05020',
        }, {
            name: 'London',
                        data: seriesData[0],
            color: '#30c020',
        }, {
            name: 'Tokyo',
                        data: seriesData[0],
            color: '#6060c0'
        }
    ]
} );
ajaxGraph.render();

var hoverDetail = new Rickshaw.Graph.HoverDetail( {
            graph: graph
        } );

        var legend = new Rickshaw.Graph.Legend( {
            graph: graph,
            element: document.getElementById('legend')

        } );

        var shelving = new Rickshaw.Graph.Behavior.Series.Toggle( {
            graph: graph,
            legend: legend
        } );


        var axes = new Rickshaw.Graph.Axis.Time( {
            graph: graph
        } );
        axes.render();
</script>

</body>

人力车
//用50个随机数据点建立我们的数据系列
var系列数据=[]、[]、[];
var random=新人力车。固定装置。随机数据(150);
对于(变量i=0;i<150;i++){
随机添加数据(系列数据);
}
var ajaxGraph=新人力车.Graph.Ajax({
元素:document.getElementById(“图表”),
宽度:400,
身高:200,
渲染器:“行”,
系列:[
{
名称:'纽约',
数据:seriesData[0],
颜色:'#c05020',
}, {
名称:“伦敦”,
数据:seriesData[0],
颜色:'#30c020',
}, {
名称:"东京",,
数据:seriesData[0],
颜色:“#6060c0”
}
]
} );
ajaxGraph.render();
var hoverDetail=新人力车.Graph.hoverDetail({
图形:图形
} );
var图例=新人力车。图形。图例({
图:图,
元素:document.getElementById('图例')
} );
var shelving=新人力车.图形.行为.系列.切换({
图:图,
传奇:传奇
} );
var轴=新人力车。图形。轴。时间({
图形:图形
} );
axes.render();

要在d3图表中获取实时数据,您需要在JSON URL上实现轮询脚本或利用WebSocket进行实时通信

轮询脚本将每隔X秒查询一次JSON URL,并根据需要执行d3添加/更新/删除模式

使用websockets,您可以保持与API的持久连接,并且服务器在更新数据时向连接的客户端发送消息。这将再次调用d3添加/更新/删除模式

因此,web套接字示例:

轮询示例:


我使用了这两种方法,但不幸的是,它们都是大公司的专有原型:/websocket示例:和轮询示例: