highcharts的动态画曲线问题 highcharts的动态画曲线问题,官网上给了一个demo是随着时间的推移每秒随机生成一个点,最近头给我一个任务是,3分钟刷新一次然后有180个点,数据是后台传过来的,不知道怎么弄,希望有这方面经验的人给个建议。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是extjs3还是extjs4? highcharts对extjs3的支持不是特别好,如果要用的话 highcharts 和 extjs 有一个adapter,可以下载后引用它,但是有版本要求: extjs3 和 highcharts 2+ (最好是2.0.5版本)。extjs3的官方论坛网上搜一下就有,如果找不到pm我,我这有存。我只用highcharts做过饼图,没做过曲线。但是我感觉原理类似。highcharts可以和extjs store动态绑定,延时也有参数可以设置。 如果是jquery就更简单了,highcharts对jquery的支持相当好。网上有很多不错的例子你搜索下。参考下面几个步骤的思路:首先画chart,注意先不加series:$(document).ready(function() { chart_answer = new Highcharts.Chart({ chart: { backgroundColor: '#ffffff', borderColor: '#a2a2a1', borderWidth: 0, borderRadius: 0, renderTo: 'answer_time_chart', type: 'area', plotBackgroundColor: '#fffdf6' }, colors: ['#3399FF'], legend: { enabled: false }, title: { text: '' }, tooltip: { borderRadius: 0, borderWidth: 0, shadow: false, style: { fontSize: '7pt', color: '#000000' }, formatter: function() { return 'Time: ' + this.x + 'Time: ' + (this.y/60|0) + ':' + (this.y % 60 < 10 ? '0':'')+(this.y % 60); } }, xAxis: { labels: { rotation: -45, x: 0, y: 40, style: { color: '#333333' } }, lineWidth: 1, lineColor: '#333333', minPadding: 0, maxPadding: 0, title: { text: '' }, tickInterval: 2, tickPlacement: 'on' }, yAxis: { gridLineWidth: 0, labels: { formatter: function() { return (this.value/60|0) + ':' + (this.value % 60 < 10 ? '0':'')+(this.value % 60); }, style: { color: '#333333' } }, lineWidth: 1, lineColor: '#333333', min: 0, minPadding: 0, maxPadding: 0, title: { text: '' } } });然后加series,这个例子是不带动态刷新的,如果要时隔一段时间动态刷新还要再结合highcharts demo那个例子对series的设置:var jsonURL = 'http://website.com/json-output.php?report=chart_answer';jQuery.getJSON( jsonURL, function( data ){var arr = [];$.each(data.data, function(key, val) { var y = val.y; var customTooltip = val.customTooltip; arr.push({y: y, customTooltip: customTooltip})})var cats = [];$.each(data.categories, function(key, val) { cats.push(val.cat)})chart_answer.xAxis[0].setCategories(cats);var series = {data: arr};chart_answer.addSeries(series);});这里是对series的设置,把它结合上面的代码放在一起改一下series: [{ name: 'Random data', data: (function() { // generate an array of random data var data = [], time = (new Date()).getTime(), i; for (i = -19; i <= 0; i++) { data.push({ x: time + i * 1000, y: Math.random() }); } return data; })() }]从后台传过来的数据格式注意下,如果你不是各种格式还要做相应调整{ "data": [ { "y": 2 }, { "y": 3 }, { "y": 3 }, { "y": 4 }, { "y": 4 }, { "y": 4 }, { "y": 3 }, { "y": 2 }, { "y": 2 }, { "y": 3 }, { "y": 3 }, { "y": 3 }, { "y": 4 }, { "y": 4 }, { "y": 4 }, { "y": 4 } ], "categories": [ { "cat": "4:45-5:00" } , { "cat": "5:00-5:15" } , { "cat": "5:15-5:30" } , { "cat": "5:30-5:45" } , { "cat": "5:45-6:00" } , { "cat": "6:00-6:15" } , { "cat": "6:15-6:30" } , { "cat": "6:30-6:45" } , { "cat": "6:45-7:00" } , { "cat": "7:00-7:15" } , { "cat": "7:15-7:30" } , { "cat": "7:30-7:45" } , { "cat": "7:45-8:00" } , { "cat": "8:00-8:15" } , { "cat": "8:15-8:30" } , { "cat": "8:30-8:45" } ], "tick": 4 } 实现定时传值可以用setInterval这个function,您要求的三分钟也就是180000毫秒实现同时设置好多点可以用chart.series[0].setData(array) 这个function, array要提前用循环赋值,这样多个值就同时传进去了.在我上面第一段代码中先定义series,其中的data可以是空的,然后在我上面的第二段代码中这样改:var jsonURL = 'http://website.com/json-output.php?report=chart_answer';//在这里开始加定时传值!setInterval(function() { jQuery.getJSON( jsonURL, function( data ){ var arr = []; //注意这里开始给array赋值了 $.each(data.data, function(key, val) { var y = val.y; var customTooltip = val.customTooltip; arr.push({y: y, customTooltip: customTooltip}) }) chart_answer.series[0].setData(arr);});}, 180000);//这里每180000毫秒传一次上面代码只是个思路,我没调试,可能会有bug 如何在EASYUI DATAGRID中进行查询?从页面文本框获取条件,不是从DATAGRID中获取条件。 js取servlet传过来的参数问题 求教, 无法使用'keydown'事件的charcode属性,值无意义 一个需求(一般人看了也白看),大拿进来 关于 iframe 中 onkeyup 事件 如何选中一个span对象进行拖曳操作 java或jsp 中如何从数据库中取出数据写入javascript文件中?? 请帮忙修正一下这小段表单验证提交的代码!谢谢! 这个中秋有点伤感。散点代码。 怎么关闭整个播放的视频 js成功信息提示问题
chart: {
backgroundColor: '#ffffff',
borderColor: '#a2a2a1',
borderWidth: 0,
borderRadius: 0,
renderTo: 'answer_time_chart',
type: 'area',
plotBackgroundColor: '#fffdf6'
},
colors: ['#3399FF'],
legend: {
enabled: false
}, title: {
text: ''
},
tooltip: {
borderRadius: 0,
borderWidth: 0,
shadow: false,
style: {
fontSize: '7pt',
color: '#000000'
},
formatter: function() {
return 'Time: ' + this.x + '
Time: ' + (this.y/60|0) + ':' + (this.y % 60 < 10 ? '0':'')+(this.y % 60); }
},
xAxis: { labels: {
rotation: -45,
x: 0,
y: 40,
style: {
color: '#333333'
}
},
lineWidth: 1,
lineColor: '#333333',
minPadding: 0,
maxPadding: 0,
title: {
text: ''
},
tickInterval: 2,
tickPlacement: 'on'
},
yAxis: {
gridLineWidth: 0,
labels: {
formatter: function() {
return (this.value/60|0) + ':' + (this.value % 60 < 10 ? '0':'')+(this.value % 60); },
style: {
color: '#333333'
}
},
lineWidth: 1,
lineColor: '#333333',
min: 0,
minPadding: 0,
maxPadding: 0,
title: {
text: ''
}
}
});
然后加series,这个例子是不带动态刷新的,如果要时隔一段时间动态刷新还要再结合highcharts demo那个例子对series的设置:var jsonURL = 'http://website.com/json-output.php?report=chart_answer';
jQuery.getJSON( jsonURL, function( data ){
var arr = [];
$.each(data.data, function(key, val) {
var y = val.y;
var customTooltip = val.customTooltip;
arr.push({y: y, customTooltip: customTooltip})
})var cats = [];
$.each(data.categories, function(key, val) {
cats.push(val.cat)
})chart_answer.xAxis[0].setCategories(cats);
var series = {data: arr};
chart_answer.addSeries(series);
});这里是对series的设置,把它结合上面的代码放在一起改一下series: [{
name: 'Random data',
data: (function() {
// generate an array of random data
var data = [],
time = (new Date()).getTime(),
i;
for (i = -19; i <= 0; i++) {
data.push({
x: time + i * 1000,
y: Math.random()
});
}
return data;
})()
}]
从后台传过来的数据格式注意下,如果你不是各种格式还要做相应调整{ "data": [ { "y": 2 }, { "y": 3 }, { "y": 3 }, { "y": 4 }, { "y": 4 }, { "y": 4 }, { "y": 3 }, { "y": 2 }, { "y": 2 }, { "y": 3 }, { "y": 3 }, { "y": 3 }, { "y": 4 }, { "y": 4 }, { "y": 4 }, { "y": 4 } ], "categories": [ { "cat": "4:45-5:00" } , { "cat": "5:00-5:15" } , { "cat": "5:15-5:30" } , { "cat": "5:30-5:45" } , { "cat": "5:45-6:00" } , { "cat": "6:00-6:15" } , { "cat": "6:15-6:30" } , { "cat": "6:30-6:45" } , { "cat": "6:45-7:00" } , { "cat": "7:00-7:15" } , { "cat": "7:15-7:30" } , { "cat": "7:30-7:45" } , { "cat": "7:45-8:00" } , { "cat": "8:00-8:15" } , { "cat": "8:15-8:30" } , { "cat": "8:30-8:45" } ], "tick": 4 }
var jsonURL = 'http://website.com/json-output.php?report=chart_answer';//在这里开始加定时传值!
setInterval(function() {
jQuery.getJSON( jsonURL, function( data ){
var arr = []; //注意这里开始给array赋值了
$.each(data.data, function(key, val) {
var y = val.y;
var customTooltip = val.customTooltip;
arr.push({y: y, customTooltip: customTooltip})
}) chart_answer.series[0].setData(arr);});
}, 180000);//这里每180000毫秒传一次
上面代码只是个思路,我没调试,可能会有bug