import * as am5 from "@amcharts/amcharts5";
import * as am5xy from "@amcharts/amcharts5/xy";
import am5themes_Animated from "@amcharts/amcharts5/themes/Animated";
// Create root
const root = am5.Root.new("chartdiv");
root.setThemes([am5themes_Animated.new(root)]);
// Create chart
const chart = root.container.children.push(am5xy.XYChart.new(root, {
panX: true,
panY: true,
wheelX: "panX",
wheelY: "zoomX"
}));
// Create axes
const xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, {
maxDeviation: 0.5,
baseInterval: { timeUnit: "day", count: 1 },
renderer: am5xy.AxisRendererX.new(root, {}),
tooltip: am5.Tooltip.new(root, {})
}));
const yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, {
renderer: am5xy.AxisRendererY.new(root, {})
}));
// Create series
const series = chart.series.push(am5xy.LineSeries.new(root, {
name: "Series",
xAxis: xAxis,
yAxis: yAxis,
valueYField: "value",
valueXField: "date",
tooltip: am5.Tooltip.new(root, {
labelText: "{valueY}"
})
}));
// Generate initial data
let value = 100;
function generateData() {
const data = [];
let date = new Date();
date.setDate(date.getDate() - 30);
for (let i = 0; i < 30; i++) {
value += Math.round((Math.random() < 0.5 ? 1 : -1) * Math.random() * 10);
data.push({
date: date.getTime(),
value: value
});
date.setDate(date.getDate() + 1);
}
return data;
}
series.data.setAll(generateData());
// Update data every second
setInterval(function() {
addData();
}, 1000);
function addData() {
const lastDataItem = series.dataItems[series.dataItems.length - 1];
const lastValue = lastDataItem.get("valueY");
const lastDate = new Date(lastDataItem.get("valueX"));
// Generate new value
const newValue = lastValue + Math.round((Math.random() < 0.5 ? 1 : -1) * Math.random() * 5);
const newDate = am5.time.add(lastDate, "day", 1).getTime();
// Remove oldest data point
series.data.removeIndex(0);
// Add new data point
series.data.push({
date: newDate,
value: newValue
});
}
chart.appear(1000, 100);