乾貨丨前端chart組件展現DolphinDB數據教程

數據圖表前端組件在物聯網和實時監控的場景有普遍的應用,當前比較流行的有Echarts、HighCharts等組件。本文主要講解如何經過DolphinDB的Web數據接口和JavaScript來展現 DolphinDB time-series database 的數據。javascript

DolphinDB提供了基於HTTPS協議的接口,能夠經過HTTP的post方式提交查詢語句並返回JSON格式的結果。具體用法能夠參考DolphinDB Web API。html

DolphinDB的返回數據格式是列式的JSON字符串。例如,一個表返回JSON以下:前端

{
"sessionID": "3691974869",
"userId": "admin",
"resultCode": "0",
"msg": "",
"object": [{
"name": "",
"form": "table",
"size": "11",
"value": [{
"name": "second_time",
"form": "vector",
"type": "second",
"size": "11",
"value": ["13:03:50", "13:03:51", "13:03:52", "13:03:53", "13:03:54", "13:03:55", "13:03:56", "13:03:57", "13:03:58", "13:03:59", "13:04:00"]
}, {
"name": "ec",
"form": "vector",
"type": "double",
"size": "11",
"value": [1.019094, 0.971753, 0.962792, 1.014048, 0.991746, 1.016851, 0.98674, 1.00463, 0.991642, 1.018987, 1.008604]
}]
}]
}
Echarts前端組件所需的數據格式以下:java

option = {
xAxis: {
data: ["13:03:50", "13:03:51", "13:03:52", "13:03:53", "13:03:54", "13:03:55", "13:03:56", "13:03:57", "13:03:58", "13:03:59", "13:04:00"]
},
yAxis: {
type: 'value'
},
series: [{
data: [1.019094, 0.971753, 0.962792, 1.014048, 0.991746, 1.016851, 0.98674, 1.00463, 0.991642, 1.018987, 1.008604],
type: 'line'
}]
};
從二者的結構來看,只須要將DolphinDB的返回結果稍做轉換便可知足Echarts的數據格式規範。使用DolphinDB Web API開發包能夠使轉換更加簡單。jquery

下面經過例子介紹如何使用Echarts和HighCharts組件來展現DolphinDB中的數據。git

  1. Echarts代碼示例

假設如下場景:工廠有10臺設備,每一毫秒採集溫度值數據並寫入DolphinDB分佈式數據表中,並在網頁中展現出每秒鐘平均溫度線狀圖。github

在DolphinDB中經過腳本模擬生成10秒鐘的數據。json

data = table(100000:0, devIdtime`ec,[INT,TIMESTAMP,DOUBLE]);
data.tableInsert(take(1..10,10000),add((1..10000),now()) , norm(1,0.5,10000))
share data as iotTable
經過JavaScript腳本從DolphinDB獲取數據,並轉換爲Echarts所需的格式。這裏使用了DolphinDB JavaScript的接口開發包(下載地址:https://github.com/dolphindb/api-json),並引入DolphinDBConnection.js和DolphinDBEntity.js兩個js文件api

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="jquery-1.9.1.min.js"></script>
<script src="DBConnection.js"></script>
<script src="DolphinDBEntity.js"></script>
<script src="http://echarts.baidu.com/gallery/vendors/echarts/echarts-all-3.js"></script>;
</head>
<body>
<div id="main" style="width: 600px;height:400px;"></div>markdown

<script type="text/javascript">
    var myChart = echarts.init(document.getElementById('main'));
    var conn = new DolphinDBConnection('http://localhost:8848');
    //向DolphinDB發送查詢腳本,並獲取返回的數據
    conn.run("select avg(ec) as ec from iotTable group by second(time)", function(re){
    if(re.resultCode&&re.resultCode=="1"){
        alert(re.msg);
    } else {
        jobj = new DolphinDBEntity(re).toVector();//將返回結果轉換成列數據
        var time = jobj[0].value;
        var ecdata = jobj[1].value;
        var option = {
            title: {
                text: '設備溫度'
            },
            xAxis: {
                data: time
            },
            yAxis: {},
            series: [{
                name: '溫度',
                type: 'line',
                data: ecdata
            }]
        };
        myChart.setOption(option);
    }
});

</script>

</body>
代碼運行的結果以下圖所示:

  1. HighCharts代碼示例

使用HighCharts展現DolphinDB數據的方式與Echarts相似。下面是HighCharts的示例腳本。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
<script src="DolphinDBConnection.js"></script>
<script src="DolphinDBEntity.js"></script>
<script src="http://cdn.highcharts.com.cn/highcharts/highcharts.js"></script>;
<script src="https://code.highcharts.com.cn/highcharts-plugins/highcharts-zh_CN.js"></script>;
</head>
<body>
<div id="main" style="width: 600px;height:400px;"></div>

<script type="text/javascript">
    var conn = new DolphinDBConnection('http://localhost:8848');
    //向DolphinDB發送查詢腳本,並獲取返回的數據
    conn.run("select avg(ec) as ec from iotTable group by second(time)", function(re){
    if(re.resultCode&&re.resultCode=="1"){
        alert(re.msg);
    } else {
        jobj = new DolphinDBEntity(re).toVector();//將返回結果轉換成列數據
        var time = jobj[0].value;
        var ecdata = jobj[1].value;
        var option = {
                chart: {
                type: 'line'
                },
                title: {
                    text: '溫度'
                },
                xAxis: {
                    categories: time
                },
            yAxis: {
                title: {
                    text: '溫度'
                }
            },
             series: [{
                name: '平均溫度',
                data: ecdata
            }]
        };
        var chart = Highcharts.chart('main', option);

    }
});

</script>

</body></html>運行結果以下圖所示:

相關文章
相關標籤/搜索