【问题标题】:How to make Amcharts animateData working?如何使 Amcharts animateData 工作?
【发布时间】:2018-04-03 23:37:47
【问题描述】:

我需要创建每分钟的实时值图表,它的最后一个柱值在添加后增加一分钟,一分钟后添加值为 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() 方法,但没有对图表应用动画。我做错了什么?

【问题讨论】:

    标签: javascript amcharts


    【解决方案1】:

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

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

    Updated codepen

    【讨论】:

    • 谢谢,最后一个栏更新动画现在可以工作了,有没有办法动画删除第一个栏并添加新的?
    • 很遗憾没有。该插件目前仅限于动画值更改而不是添加/删除全新的。
    猜你喜欢
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    相关资源
    最近更新 更多