<!-- Styles --><style>#chartdiv {
width: 100%;
height: 500px;
}
</style><!-- Resources --><scriptsrc="https://cdn.amcharts.com/lib/5/index.js"></script><scriptsrc="https://cdn.amcharts.com/lib/5/percent.js"></script><scriptsrc="https://cdn.amcharts.com/lib/5/themes/Animated.js"></script><!-- Chart code --><script>
am5.ready(function() {
// Create root element// https://www.amcharts.com/docs/v5/getting-started/#Root_elementvar root = am5.Root.new("chartdiv");
// Set themes// https://www.amcharts.com/docs/v5/concepts/themes/
root.setThemes([
am5themes_Animated.new(root)
]);
root.container.set("layout", root.verticalLayout);
// Create container to hold chartsvar chartContainer = root.container.children.push(am5.Container.new(root, {
layout: root.horizontalLayout,
width: am5.p100,
height: am5.p100
}));
// Create the 1st chart// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/var chart = chartContainer.children.push(
am5percent.PieChart.new(root, {
endAngle: 270,
innerRadius: am5.percent(60)
})
);
var series = chart.series.push(
am5percent.PieSeries.new(root, {
valueField: "value",
categoryField: "category",
endAngle: 270,
alignLabels: false
})
);
series.children.push(am5.Label.new(root, {
centerX: am5.percent(50),
centerY: am5.percent(50),
text: "First: {valueSum}",
populateText: true,
fontSize: "1.5em"
}));
series.slices.template.setAll({
cornerRadius: 8
})
series.states.create("hidden", {
endAngle: -90
});
series.labels.template.setAll({
textType: "circular"
});
// Create the 2nd chart// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/var chart2 = chartContainer.children.push(
am5percent.PieChart.new(root, {
endAngle: 270,
innerRadius: am5.percent(60)
})
);
var series2 = chart2.series.push(
am5percent.PieSeries.new(root, {
valueField: "value",
categoryField: "category",
endAngle: 270,
alignLabels: false,
tooltip: am5.Tooltip.new(root, {}) // a separate tooltip needed for this series
})
);
series2.children.push(am5.Label.new(root, {
centerX: am5.percent(50),
centerY: am5.percent(50),
text: "Second: {valueSum}",
populateText: true,
fontSize: "1.5em"
}));
series2.slices.template.setAll({
cornerRadius: 8
})
series2.states.create("hidden", {
endAngle: -90
});
series2.labels.template.setAll({
textType: "circular"
});
// Duplicate interaction// Must be added before setting data
series.slices.template.events.on("pointerover", function(ev) {
var slice = ev.target;
var dataItem = slice.dataItem;
var otherSlice = getSlice(dataItem, series2);
if (otherSlice) {
otherSlice.hover();
}
});
series.slices.template.events.on("pointerout", function(ev) {
var slice = ev.target;
var dataItem = slice.dataItem;
var otherSlice = getSlice(dataItem, series2);
if (otherSlice) {
otherSlice.unhover();
}
});
series.slices.template.on("active", function(active, target) {
var slice = target;
var dataItem = slice.dataItem;
var otherSlice = getSlice(dataItem, series2);
if (otherSlice) {
otherSlice.set("active", active);
}
});
// Same for the 2nd series
series2.slices.template.events.on("pointerover", function(ev) {
var slice = ev.target;
var dataItem = slice.dataItem;
var otherSlice = getSlice(dataItem, series);
if (otherSlice) {
otherSlice.hover();
}
});
series2.slices.template.events.on("pointerout", function(ev) {
var slice = ev.target;
var dataItem = slice.dataItem;
var otherSlice = getSlice(dataItem, series);
if (otherSlice) {
otherSlice.unhover();
}
});
series2.slices.template.on("active", function(active, target) {
var slice = target;
var dataItem = slice.dataItem;
var otherSlice = getSlice(dataItem, series);
if (otherSlice) {
otherSlice.set("active", active);
}
});
// Set data// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/#Setting_data
series.data.setAll([{
category: "Lithuania",
value: 501
}, {
category: "Czechia",
value: 301
}, {
category: "Ireland",
value: 201
}, {
category: "Germany",
value: 165
}]);
// Set data// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/#Setting_data
series2.data.setAll([{
category: "Lithuania",
value: 201
}, {
category: "Czechia",
value: 101
}, {
category: "Ireland",
value: 51
}, {
category: "Germany",
value: 15
}]);
functiongetSlice(dataItem, series) {
var otherSlice;
am5.array.each(series.dataItems, function(di) {
if (di.get("category") === dataItem.get("category")) {
otherSlice = di.get("slice");
}
});
return otherSlice;
}
// Create legendvar legend = root.container.children.push(am5.Legend.new(root, {
x: am5.percent(50),
centerX: am5.percent(50)
}));
// Trigger all the same for the 2nd series
legend.itemContainers.template.events.on("pointerover", function(ev) {
var dataItem = ev.target.dataItem.dataContext;
var slice = getSlice(dataItem, series2);
slice.hover();
});
legend.itemContainers.template.events.on("pointerout", function(ev) {
var dataItem = ev.target.dataItem.dataContext;
var slice = getSlice(dataItem, series2);
slice.unhover();
});
legend.itemContainers.template.on("disabled", function(disabled, target) {
var dataItem = target.dataItem.dataContext;
var slice = getSlice(dataItem, series2);
if (disabled) {
series2.hideDataItem(slice.dataItem);
}
else {
series2.showDataItem(slice.dataItem);
}
});
legend.data.setAll(series.dataItems);
series.appear(1000, 100);
}); // end am5.ready()</script><!-- HTML --><divid="chartdiv"></div>
/* Imports */import am5index from"@amcharts/amcharts5/index";
import am5percent from"@amcharts/amcharts5/percent";
import am5themes_Animated from"@amcharts/amcharts5/themes/Animated";
/* Chart code */// Create root element// https://www.amcharts.com/docs/v5/getting-started/#Root_elementlet root = am5.Root.new("chartdiv");
// Set themes// https://www.amcharts.com/docs/v5/concepts/themes/
root.setThemes([
am5themes_Animated.new(root)
]);
root.container.set("layout", root.verticalLayout);
// Create container to hold chartslet chartContainer = root.container.children.push(am5.Container.new(root, {
layout: root.horizontalLayout,
width: am5.p100,
height: am5.p100
}));
// Create the 1st chart// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/let chart = chartContainer.children.push(
am5percent.PieChart.new(root, {
endAngle: 270,
innerRadius: am5.percent(60)
})
);
let series = chart.series.push(
am5percent.PieSeries.new(root, {
valueField: "value",
categoryField: "category",
endAngle: 270,
alignLabels: false
})
);
series.children.push(am5.Label.new(root, {
centerX: am5.percent(50),
centerY: am5.percent(50),
text: "First: {valueSum}",
populateText: true,
fontSize: "1.5em"
}));
series.slices.template.setAll({
cornerRadius: 8
})
series.states.create("hidden", {
endAngle: -90
});
series.labels.template.setAll({
textType: "circular"
});
// Create the 2nd chart// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/let chart2 = chartContainer.children.push(
am5percent.PieChart.new(root, {
endAngle: 270,
innerRadius: am5.percent(60)
})
);
let series2 = chart2.series.push(
am5percent.PieSeries.new(root, {
valueField: "value",
categoryField: "category",
endAngle: 270,
alignLabels: false,
tooltip: am5.Tooltip.new(root, {}) // a separate tooltip needed for this series
})
);
series2.children.push(am5.Label.new(root, {
centerX: am5.percent(50),
centerY: am5.percent(50),
text: "Second: {valueSum}",
populateText: true,
fontSize: "1.5em"
}));
series2.slices.template.setAll({
cornerRadius: 8
})
series2.states.create("hidden", {
endAngle: -90
});
series2.labels.template.setAll({
textType: "circular"
});
// Duplicate interaction// Must be added before setting data
series.slices.template.events.on("pointerover", function(ev) {
let slice = ev.target;
let dataItem = slice.dataItem;
let otherSlice = getSlice(dataItem, series2);
if (otherSlice) {
otherSlice.hover();
}
});
series.slices.template.events.on("pointerout", function(ev) {
let slice = ev.target;
let dataItem = slice.dataItem;
let otherSlice = getSlice(dataItem, series2);
if (otherSlice) {
otherSlice.unhover();
}
});
series.slices.template.on("active", function(active, target) {
let slice = target;
let dataItem = slice.dataItem;
let otherSlice = getSlice(dataItem, series2);
if (otherSlice) {
otherSlice.set("active", active);
}
});
// Same for the 2nd series
series2.slices.template.events.on("pointerover", function(ev) {
let slice = ev.target;
let dataItem = slice.dataItem;
let otherSlice = getSlice(dataItem, series);
if (otherSlice) {
otherSlice.hover();
}
});
series2.slices.template.events.on("pointerout", function(ev) {
let slice = ev.target;
let dataItem = slice.dataItem;
let otherSlice = getSlice(dataItem, series);
if (otherSlice) {
otherSlice.unhover();
}
});
series2.slices.template.on("active", function(active, target) {
let slice = target;
let dataItem = slice.dataItem;
let otherSlice = getSlice(dataItem, series);
if (otherSlice) {
otherSlice.set("active", active);
}
});
// Set data// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/#Setting_data
series.data.setAll([{
category: "Lithuania",
value: 501
}, {
category: "Czechia",
value: 301
}, {
category: "Ireland",
value: 201
}, {
category: "Germany",
value: 165
}]);
// Set data// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/#Setting_data
series2.data.setAll([{
category: "Lithuania",
value: 201
}, {
category: "Czechia",
value: 101
}, {
category: "Ireland",
value: 51
}, {
category: "Germany",
value: 15
}]);
functiongetSlice(dataItem, series) {
let otherSlice;
am5.array.each(series.dataItems, function(di) {
if (di.get("category") === dataItem.get("category")) {
otherSlice = di.get("slice");
}
});
return otherSlice;
}
// Create legendlet legend = root.container.children.push(am5.Legend.new(root, {
x: am5.percent(50),
centerX: am5.percent(50)
}));
// Trigger all the same for the 2nd series
legend.itemContainers.template.events.on("pointerover", function(ev) {
let dataItem = ev.target.dataItem.dataContext;
let slice = getSlice(dataItem, series2);
slice.hover();
});
legend.itemContainers.template.events.on("pointerout", function(ev) {
let dataItem = ev.target.dataItem.dataContext;
let slice = getSlice(dataItem, series2);
slice.unhover();
});
legend.itemContainers.template.on("disabled", function(disabled, target) {
let dataItem = target.dataItem.dataContext;
let slice = getSlice(dataItem, series2);
if (disabled) {
series2.hideDataItem(slice.dataItem);
}
else {
series2.showDataItem(slice.dataItem);
}
});
legend.data.setAll(series.dataItems);
series.appear(1000, 100);
We use cookies on our website to support technical features that enhance your user experience. We also collect anonymous analytical data, as described in our Privacy policy.