@amcharts/amcharts4
Version:
amCharts 4
125 lines (101 loc) • 3.55 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.paddingBottom = 30;
chart.data = [{
"name": "Monica",
"steps": 45688
}, {
"name": "Joey",
"steps": 35781
}, {
"name": "Ross",
"steps": 25464
}, {
"name": "Phoebe",
"steps": 18788
}, {
"name": "Rachel",
"steps": 15465
}, {
"name": "Chandler",
"steps": 11561
}];
let categoryAxis = chart.xAxes.push(new am4charts.CategoryAxis());
categoryAxis.dataFields.category = "name";
categoryAxis.renderer.grid.template.strokeOpacity = 0;
categoryAxis.renderer.minGridDistance = 10;
categoryAxis.renderer.labels.template.dy = 35;
categoryAxis.renderer.tooltip.dy = 35;
let valueAxis = chart.yAxes.push(new am4charts.ValueAxis());
valueAxis.renderer.inside = true;
valueAxis.renderer.labels.template.fillOpacity = 0.3;
valueAxis.renderer.grid.template.strokeOpacity = 0;
valueAxis.min = 0;
valueAxis.cursorTooltipEnabled = false;
valueAxis.renderer.baseGrid.strokeOpacity = 0;
let series = chart.series.push(new am4charts.ColumnSeries);
series.dataFields.valueY = "steps";
series.dataFields.categoryX = "name";
series.tooltipText = "{valueY.value}";
series.tooltip.pointerOrientation = "vertical";
series.tooltip.dy = - 6;
series.columnsContainer.zIndex = 100;
let columnTemplate = series.columns.template;
columnTemplate.width = am4core.percent(50);
columnTemplate.maxWidth = 66;
columnTemplate.column.cornerRadius(60, 60, 10, 10);
columnTemplate.strokeOpacity = 0;
series.heatRules.push({ target: columnTemplate, property: "fill", dataField: "valueY", min: am4core.color("#e5dc36"), max: am4core.color("#5faa46") });
series.mainContainer.mask = undefined;
let cursor = new am4charts.XYCursor();
chart.cursor = cursor;
cursor.lineX.disabled = true;
cursor.lineY.disabled = true;
cursor.behavior = "none";
let bullet = columnTemplate.createChild(am4charts.CircleBullet);
bullet.circle.radius = 30;
bullet.valign = "bottom";
bullet.align = "center";
bullet.isMeasured = true;
bullet.interactionsEnabled = false;
bullet.verticalCenter = "bottom";
let hoverState = bullet.states.create("hover");
let outlineCircle = bullet.createChild(am4core.Circle);
outlineCircle.adapter.add("radius", (radius, target) => {
let circleBullet = target.parent;
return circleBullet.circle.pixelRadius + 10;
})
let image = bullet.createChild(am4core.Image);
image.width = 60;
image.height = 60;
image.horizontalCenter = "middle";
image.verticalCenter = "middle";
image.adapter.add("href", (href, target) => {
let dataItem = target.dataItem;
if (dataItem) {
return dataItem.categoryX.toLowerCase() + ".jpg";
}
})
image.adapter.add("mask", (mask, target) => {
let circleBullet = target.parent;
return circleBullet.circle;
})
let previousBullet;
chart.cursor.events.on("cursorpositionchanged", (event) => {
let dataItem = series.tooltipDataItem;
if (dataItem.column) {
let bullet = dataItem.column.children.getIndex(1);
if (previousBullet && previousBullet != bullet) {
previousBullet.isHover = false;
}
if (previousBullet != bullet) {
let hs = bullet.states.getKey("hover");
hs.properties.dy = -bullet.parent.pixelHeight + 30;
bullet.isHover = true;
previousBullet = bullet;
}
}
})