@amcharts/amcharts4
Version:
amCharts 4
111 lines (90 loc) • 2.89 kB
JavaScript
import * as am4core from "@amcharts/amcharts4/core";
import * as am4charts from "@amcharts/amcharts4/charts";
import am4themes_animated from "@amcharts/amcharts4/themes/animated";
am4core.useTheme(am4themes_animated);
let chart = am4core.create("chartdiv", am4charts.XYChart);
chart.data = [{
"x": 10,
"y": 14,
"errorX": 3,
"errorY": 4
}, {
"x": 5,
"y": 3,
"errorX": 1.52,
"errorY": 6.8
}, {
"x": -10,
"y": 3,
"errorX": 0.8,
"errorY": 3.5
}, {
"x": -6,
"y": 5,
"errorX": 1.2,
"errorY": 4.2
}, {
"x": 11,
"y": -4,
"errorX": 2.4,
"errorY": 3.9
}, {
"x": 13,
"y": 1,
"errorX": 1.5,
"errorY": 3.3
}, {
"x": 1,
"y": 6,
"errorX": 2,
"errorY": 3.3
}];
chart.padding(40, 40, 40, 40);
let valueAxisX = chart.xAxes.push(new am4charts.ValueAxis());
let valueAxisY = chart.yAxes.push(new am4charts.ValueAxis());
let series = chart.series.push(new am4charts.LineSeries());
series.dataFields.valueX = "x";
series.dataFields.valueY = "y";
series.strokeOpacity = 0;
let errorBulletY = series.bullets.create(am4charts.ErrorBullet);
errorBulletY.isDynamic = true;
errorBulletY.strokeWidth = 2;
errorBulletY.tooltipText = "x: {valueX.value} y: {valueY.value} error x:{errorX}, error y:{errorY}";
// adapter adjusts height of a bullet
errorBulletY.adapter.add("pixelHeight", (pixelHeight, target) => {
let dataItem = target.dataItem;
if (dataItem) {
let value = dataItem.valueY;
let errorTopValue = value + dataItem.dataContext.errorY / 2;
let errorTopY = valueAxisY.valueToPoint(errorTopValue).y;
let errorBottomValue = value - dataItem.dataContext.errorY / 2;
let errorBottomY = valueAxisY.valueToPoint(errorBottomValue).y;
return Math.abs(errorTopY - errorBottomY);
}
return pixelHeight;
})
let errorBulletX = series.bullets.create(am4charts.ErrorBullet);
errorBulletX.tooltipText = "x: {valueX.value} y: {valueY.value} error x:{errorX}, error y:{errorY}";
errorBulletX.isDynamic = true;
errorBulletX.strokeWidth = 2;
errorBulletX.rotation = 90; // need to rotate, as error bullet is vertical
let circle = errorBulletX.createChild(am4core.Circle);
circle.radius = 5;
circle.fill = am4core.color("#ffffff");
// adapter adjusts height of a bullet
errorBulletX.adapter.add("pixelHeight", (pixelHeight, target) => {
let dataItem = target.dataItem;
if (dataItem) {
let value = dataItem.valueY;
let errorTopValue = value + dataItem.dataContext.errorX / 2;
let errorTopX = valueAxisX.valueToPoint(errorTopValue).x;
let errorBottomValue = value - dataItem.dataContext.errorX / 2;
let errorBottomX = valueAxisX.valueToPoint(errorBottomValue).x;
return Math.abs(errorTopX - errorBottomX);
}
return pixelHeight;
})
chart.cursor = new am4charts.XYCursor();
chart.cursor.behavior = "zoomXY";
chart.scrollbarX = new am4core.Scrollbar();
chart.scrollbarY = new am4core.Scrollbar();