动态时间序列C3js图表
Dynamic timeseries C3js chart
我是C3.js的新手,正在尝试创建动态时间序列图,请在fiddle中运行代码http://jsfiddle.net/roytirthadeep/54v7r0ab/
var chart = c3.generate({
data: {
x: 'x',
xFormat: '%Y-%m-%dT%H:%M:%S',
columns: []
},
axis: {
x: {
type: 'timeseries',
tick: {
format: '%H:%M:%S',
}
}
},
legend: {
position: 'right'
}
});
//"2013-01-01T00:00:01"
var timeInc = 1;
var value = 1;
var interval = setInterval(function () {
value = value + 1;
timeInc++;
var str;
if (timeInc > 59) {
clearInterval(interval);
return;
}
if (timeInc >= 10) {
str = ''+timeInc;
} else {
str = '0'+timeInc;
}
xValue = "2013-01-01T00:00:"+str;
if (value)
if (value < 7) {
console.log("xValue",xValue);
console.log("value",value);
chart.flow({
columns: [
['x', xValue],
['data3', value]
],
length:0
});
} else {
chart.flow({
columns: [
['x', xValue],
['data3', value],
['data4', value*2],
['data5', value/2],
['data6', value-1]
],
length:0
});
}
}, 1000);
Q1.这是在C3.js中实现所需行为的正确方法吗?
Q2.如何实现http://www.highcharts.com/stock/demo/dynamic-update高图表后面(从空白图表开始)
我得到了一个解决方案,并将其添加为答案。
我得到了一个解决方案,通过重置x轴范围和检查阈值来实现像Highcharts这样的期望行为。这可能对其他人有帮助http://jsfiddle.net/54v7r0ab/5/
var chart = c3.generate({
data: {
x: 'x',
columns: []
},
axis: {
x: {
type: 'timeseries',
tick: {
format: '%H:%M:%S',
}
}
},
legend: {
position: 'right'
}
});
var chartObj = {
"chart": chart,
"redrawArgs": {},
"truncThreshold": undefined
}
//"2013-01-01T00:00:01"
var date = 1463017666000;
var timeInc = 1000;
var value = 1;
var interval = setInterval(function () {
var dataCols = [];
date = date + timeInc;
var minX = date - 10000;
var maxX = date;
var redrawArgs = chartObj.redrawArgs;
if (!chartObj.truncThreshold) {
chartObj.truncThreshold = maxX;
} else if (minX > chartObj.truncThreshold) {
redrawArgs.length = 1;
} else {
redrawArgs.length = 0;
}
chartObj.chart.axis.range({max: {x: maxX}, min: {x: minX}});
value++;
redrawArgs.duration = 0;
if (value < 7) {
dataCols.push(['x', date]);
dataCols.push(['data 1', value]);
redrawArgs.columns = dataCols;
} else {
dataCols.push(['x', date]);
dataCols.push(['data 1', value]);
dataCols.push(['data 2', value*Math.random()])
dataCols.push(['data 3', value/Math.random()]);
dataCols.push(['data 4', value+Math.random()]);
redrawArgs.columns = dataCols;
}
chartObj.chart.flow(redrawArgs);
}, 1000);
有一个C3的流api,它可以用更少的代码来满足您的要求,但令人恼火的是(尤其是在我写了大部分答案之后),它有一个错误,如果选项卡被隐藏,它不会删除点-https://github.com/c3js/c3/issues/1097
var chart = c3.generate({
data: {
x: 'x',
columns: [
['x', '2012-12-28', '2012-12-29', '2012-12-30', '2012-12-31'],
['data1', 100, 230, 300, 330],
['data2', 250, 190, 230, 200],
['data3', 120, 90, 130, 180],
]
},
axis: {
x: {
type: 'timeseries',
tick: {
format: '%m/%d',
}
}
}
});
var date = new Date ("2013-01-01");
setInterval(function () {
chart.flow({
columns: [
['x', new Date (date)],
['data1', 200 + (Math.random() * 300)],
['data2', 200 + (Math.random() * 300)],
['data3', 200 + (Math.random() * 300)],
],
duration: 750,
});
date.setDate(date.getDate() + 1);
}, 2000);
http://jsfiddle.net/54v7r0ab/7/
在这个错误被修复之前,我会接受你的答案,因为它不会出现同样的问题。
编辑:可能的修复。当使用流api的done函数时,新数据将停止添加到隐藏的选项卡中,从而避免了"堆积"问题。然而,只有当你不想在不看的时候不断添加数据时,这才有用:-),它不是实时图形的解决方案。
http://jsfiddle.net/54v7r0ab/10/
var date = new Date ("2013-01-01");
var pushNew = function () {
chart.flow({
columns: [
['x', new Date (date)],
['data1', 200 + (Math.random() * 300)],
['data2', 200 + (Math.random() * 300)],
['data3', 200 + (Math.random() * 300)],
],
duration: 750,
done: function () {
date.setDate(date.getDate() + 1);
window.setTimeout (pushNew, 1);
}
});
}
pushNew();
相关文章:
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- 角度图表;t显示在我的页面中
- 更改使用Chart.js创建的图表中的轴线颜色
- addData()从最新图表中删除.js 2.1.3-怎么了
- 在Highcharts中,我们可以通过任何方式在渲染图表之前获得plotWidth和plotHeight
- 谷歌图表-如何更改整个表的css属性
- chart.series[id].remove()无法刷新高位图表/高位股票中其他系列的图例属性
- 正在等待呈现图表,直到加载数据为止
- 正在打印图表上的文本
- 剑道图表:如何创建热图
- 使用谷歌图表在x轴上绘制日期
- HTML5FileReader输出到D3.js图表
- 谷歌图表显示所有标签
- 如何在谷歌日历图表中使用布尔型列
- 谷歌图表API:添加空白行到时间线
- Highcharts-图表外的图例定位
- Html未呈现图表
- 如何在c3js动态图表上进行平滑(水平)转换
- 动态时间序列C3js图表
- c3js - 使用 chart.load() 使用颜色数组更新图表颜色