前面写过“Highcharts的用法总结”,当然了,在实际应用中,图表数据都是要从后台获取的,根据之前的使用,贴一些例子来分享学习。
首先,如果没有获取后台数据,又希望呈现一个动态图表的话,可以很轻易的想到,Y值可以写成随机数,当然,X轴最常见的就是当前时间。那么,同理,用后台获取的数据替换随机数,不就实现了“Ajax—动态图表”嘛。
一、向图表中插入随机点
<div id="container21" style="min- 500px;height: 320px;border-bottom: 1px dashed #9b9d9e;"></div>
<script> Highcharts.setOptions({ global: { useUTC: false } }); var chart21 = new Highcharts.Chart({ chart: { renderTo: 'container21', type: 'spline' }, title: { text: '历史温度' }, subtitle: { text: " " }, credits: { enabled: false }, xAxis: { type: 'datetime', dateTimeLabelFormats: { day: '%H : %M' } }, yAxis: { labels: { format: '{value}', style: { color: Highcharts.getOptions().colors[0] } }, title: { text: '温度:摄氏度', style: { color: Highcharts.getOptions().colors[0] } }, startOnTick: true, //为true时,设置min才有效 min: 0, plotLines: [{ value: 0, 1, color: '#808080' }] }, tooltip: { formatter: function () { return '<b>' + this.series.name + '</b><br/>' + Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) + '<br/>' + '<span style="color:#08c">' + Highcharts.numberFormat(this.y, 2) + ' 摄氏度' + '</span>'; }, crosshairs: true }, legend: { enabled: true }, exporting: { enabled: false }, series: [{ type: 'spline', name: '温度', data: (function () { var data = [], time = (new Date()).getTime(), i; for (i = -9; i <= 0; i++) { // 图表初始显示10个点(均为0),当前时间是最后那个初始点的X,故之前的点的时间(X)是当前时间之前,故i为负 data.push({ x: time + i * 1000, y: 0 }); } return data; })() }] }); setInterval(function(){ var x; var y; x = (new Date()).getTime(); y = Math.random(); // Y 是随机数 chart21.series[0].addPoint([x, y], true, true); //追加点并去掉一个点 //chart.series[0].addPoint([x, y]);追加点( 不去掉点 ) },1000); </script>
图表中初始的时候,是10个0,后来就出现随机数点。
二、用后台获取的数据替换随机数,实现“Ajax—动态图表”
<script>
// 温度
Highcharts.setOptions({ global: { useUTC: false } });
var chart1 = new Highcharts.Chart({
chart: {
renderTo: 'container1',
type: 'spline'
},
title: {
text: ''
},
subtitle: {
text: " "
},
credits: {
enabled: false
},
xAxis: {
type: 'datetime',
dateTimeLabelFormats: {
day: '%H : %M'
}
},
yAxis: {
labels: {
format: '{value}',
style: {
color: Highcharts.getOptions().colors[1]
}
},
title: {
text: '温度:摄氏度',
style: {
color: Highcharts.getOptions().colors[1]
}
},
startOnTick: true,
min: 0,
plotLines: [{
value: 0,
1,
color: '#808080'
}]
},
tooltip: {
formatter: function () {
return '<b>' + this.series.name + '</b><br/>' +
Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) + '<br/>' + '<span style="color:#08c">' +
Highcharts.numberFormat(this.y, 2) + ' 摄氏度' + '</span>';
},
crosshairs: true
},
legend: {
enabled: true
},
exporting: {
enabled: false
},
series: [{
type: 'spline',
name: '温度',
data: (function () {
var data = [],
time = (new Date()).getTime(),
i;
for (i = -9; i <= 0; i++) {
data.push({
x: time,
y: 0
});
}
return data;
})()
}]
});
// 湿度
Highcharts.setOptions({ global: { useUTC: false } });
var chart2 = new Highcharts.Chart({
chart: {
renderTo: 'container2',
type: 'spline'
},
title: {
text: ''
},
subtitle: {
text: " "
},
credits: {
enabled: false
},
xAxis: {
type: 'datetime',
dateTimeLabelFormats: {
day: '%H : %M'
}
},
yAxis: {
labels: {
format: '{value}',
style: {
color: Highcharts.getOptions().colors[1]
}
},
title: {
text: '湿度:%',
style: {
color: Highcharts.getOptions().colors[1]
}
},
startOnTick: true,
min: 0,
plotLines: [{
value: 0,
1,
color: '#808080'
}]
},
tooltip: {
formatter: function () {
return '<b>' + this.series.name + '</b><br/>' +
Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) + '<br/>' + '<span style="color:#08c">' +
Highcharts.numberFormat(this.y, 2) + ' %' + '</span>';
},
crosshairs: true
},
legend: {
enabled: true
},
exporting: {
enabled: false
},
series: [{
type: 'spline',
name: '湿度',
data: (function () {
var data = [],
time = (new Date()).getTime(),
i;
for (i = -9; i <= 0; i++) {
data.push({
x: time,
y: 0
});
}
return data;
})()
}]
});
var temperature, humidity; $(function () { function getDataList() { try { $.ajax({ type: "post", url: "/produce/enviroment/getenviroment", data: { }, dataType: "json", async: false, success: function (e) { temperature = e.Temperature; humidity = e.Humidity; }, error: function (e) { console("err"); } }); } catch (e) { console(e); } } setInterval(function () { getDataList(); var x1, x2, y1, y2; x1 = (new Date()).getTime(); x2 = (new Date()).getTime(); y1 = temperature; y2 = humidity; chart1.series[0].addPoint([x1,y1],true,true); chart2.series[0].addPoint([x2, y2], true, true); }, 1000); }); </script>
每秒都获取后台数据,然后插入到图表中~~~