function updateChart(chartDivId, data, chartColors) { var chart = findChart(chartDivId); chart.dataProvider = data; if (chartColors) { chart.colors = chartColors; } chart.validateData(); checkEmptyData(chart); }; function findChart(id) { var matchedCharts = AmCharts.charts.filter(function (chart, index) { return chart.div && chart.div.id === id; }) if (matchedCharts.length) { return matchedCharts[0]; } }; function invalidateChartSize(chartId) { var chart = findChart(chartId); chart.invalidateSize(); }; function checkEmptyData(chart) { chart.clearLabels(); if (chart.dataProvider === undefined || 0 == chart.dataProvider.length) { if (chart.type != "pie") { // set min/max on the value axis //chart.valueAxes[0].minimum = 0; //chart.valueAxes[0].maximum = 100; // add dummy data point var dataPoint = { dummyValue: 0 }; dataPoint[chart.categoryField] = ''; chart.dataProvider = [dataPoint]; // add label chart.addLabel("50%", '50%', 'The chart contains no data', 'center', 12, 0, 0.5); // set opacity of the chart div //chart.chartDiv.style.opacity = 0.5; // redraw it //chart.validateNow(); } else { var dp = {}; dp[chart.titleField] = ""; dp[chart.valueField] = 1; chart.dataProvider.push(dp) var dp = {}; dp[chart.titleField] = ""; dp[chart.valueField] = 1; chart.dataProvider.push(dp) var dp = {}; dp[chart.titleField] = ""; dp[chart.valueField] = 1; chart.dataProvider.push(dp) // disable slice labels //chart.labelsEnabled = false; // add label to let users know the chart is empty chart.addLabel("50%", "60%", "The chart contains no data", "center", 12, 0, 0.1); // dim the whole chart //chart.alpha = 0.3; chart.validateNow(); } } };