gpt4 book ai didi

javascript - 如何使 Amcharts animateData 工作?

转载 作者:行者123 更新时间:2023-12-03 02:09:29 26 4
gpt4 key购买 nike

我需要创建每分钟实时值图表,其最后一个柱值在添加后增加一分钟,一分钟后添加值为 1 的新柱,并删除第一个柱(最旧的柱)。

我需要将所有这些更改设置为动画,如下例所示。

var chart = AmCharts.makeChart("chartdiv", {
"type": "serial",
"theme": "light",
"dataProvider": generateChartData(),
"graphs": [{
"valueField": "value",
"type": "column",
"fillAlphas": 1,
"alphaField": "alpha1"
}, {
"valueField": "value2",
"fillAlphas": 1,
"type": "column",
"alphaField": "alpha2"
}],
"valueAxes": [{
"minimum": 0,
"maximum": 400
}],
"chartCursor": {},
"categoryAxis": {
"parseDates": true,
"minPeriod": "mm"
},
"zoomOutOnDataUpdate": false,
"categoryField": "date"
});


function generateChartData() {
var chartData = [];
var firstDate = new Date( 2012, 0, 1 );
firstDate.setDate( firstDate.getDate() - 1000 );
firstDate.setHours( 0, Math.floor(Math.random() * 10), 0, 0 );

for ( var i = 0; i < 10; i++ ) {
var newDate = new Date( firstDate );
newDate.setHours( 0, i, 0, 0 );

var a = Math.round( Math.random() * ( 200 + i ) ) + 100 + i;
var b = Math.round( Math.random() * ( 200 + i ) ) + 100 + i;

chartData.push( {
date: newDate,
value: a,
value2: b,
alpha1: (Math.random() < 0.5 ? 0 : 1),
alpha2: (Math.random() < 0.5 ? 0 : 1)
} );
}

return chartData;
}


function loop() {
var data = generateChartData();

chart.animateData(data, {
duration: 1000,
complete: function () {
setTimeout(loop, 2000);
}
});
}

chart.addListener("init", function () {
setTimeout(loop, 1000);
});
html, body {
width: 100%;
height: 100%;
margin: 0px;
}

#chartdiv {
width: 100%;
height: 100%;
}
<script src="https://www.amcharts.com/lib/3/amcharts.js"></script>
<script src="https://www.amcharts.com/lib/3/serial.js"></script>
<script src="https://www.amcharts.com/lib/3/themes/light.js"></script>
<script src="https://www.amcharts.com/lib/3/plugins/animate/animate.min.js"></script>

<div id="chartdiv"></div>

我设置了带有条形图的codepen及其数据更新here 。我用animateData()方法与示例中类似,但没有动画应用于图表。我做错了什么?

最佳答案

数据需要是一个全新的数组才能使动画正常工作,如您链接的示例所示。您需要克隆修改后的数组并将其传递到 animateData 方法中。这是使用 lodash 的 cloneDeep method 的示例

  chart.animateData(_.cloneDeep(data), {
duration: 1000,
complete: () => setTimeout(updateChartData, 500),
});

Updated codepen

关于javascript - 如何使 Amcharts animateData 工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49640580/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com