我的应用程序中有两个highcharts,一个是柱状图,另一个是饼图。在第一个柱状图中,我显示了几年的汽车销量,向下钻取一年,它显示了y个季度的销量。然后是一个单独的饼图,按地区显示汽车销量。在向下钻取一个地区时,它会按选定地区中的子地区显示汽车销量。我想要的是同步这两个图表。例如,最初的柱状图显示多年来的销售额,而饼图显示地区的销售额。当我单击某一年时,它应该向下钻取以按季度显示销售额,而饼图也应该更新为按地区显示销售额,但仅显示柱状图中选定年份的销售额。我尝试了几种方法,但都不能得到解决方案。有什么办法可以解决这个问题吗?
以下是我使用的示例代码。https://jsfiddle.net/yasirunilan/erqm86k7/15/
// Create the chart
Highcharts.chart('container', {
chart: {
type: 'column'
},
title: {
text: 'Car Sales'
},
xAxis: {
type: 'category'
},
yAxis: {
title: {
text: 'Total percent Car Sales'
}
},
legend: {
enabled: false
},
plotOptions: {
series: {
borderWidth: 0,
dataLabels: {
enabled: true,
format: '{point.y:.1f}%'
}
}
},
tooltip: {
headerFormat: '<span style="font-size:11px">{series.name}</span><br>',
pointFormat: '<span style="color:{point.color}">{point.name}</span>: <b>{point.y:.2f}%</b> of total<br/>'
},
"series": [
{
"name": "Years",
"colorByPoint": true,
"data": [
{
"name": "2015",
"y": 62.74,
"drilldown": "2015"
},
{
"name": "2016",
"y": 10.57,
"drilldown": "2016"
},
{
"name": "2017",
"y": 7.23,
"drilldown": "2017"
},
{
"name": "2018",
"y": 5.58,
"drilldown": "2018"
},
]
}
],
"drilldown": {
"series": [
{
"name": "2015",
"id": "2015",
"data": [
{
"name": "Q1",
"y": 0.4
},
{
"name": "Q2",
"y": 0.3
},
{
"name": "Q3",
"y": 0.2
},
{
"name": "Q4",
"y": 0.1
}
]
},
{
"name": "2016",
"id": "2016",
"data": [
{
"name": "Q1",
"y": 0.1
},
{
"name": "Q2",
"y": 0.2
},
{
"name": "Q3",
"y": 0.2
},
{
"name": "Q4",
"y": 0.1
}
]
},
{
"name": "2017",
"id": "2017",
"data": [
{
"name": "Q1",
"y": 0.1
},
{
"name": "Q2",
"y": 0.3
},
{
"name": "Q3",
"y": 0.2
},
{
"name": "Q4",
"y": 0.1
}
]
},
{
"name": "2018",
"id": "2018",
"data": [
{
"name": "Q1",
"y": 0.1
},
{
"name": "Q2",
"y": 0.1
},
{
"name": "Q3",
"y": 0.3
}
]
}
]
}
});
// Create the chart
Highcharts.chart('container-pie', {
chart: {
type: 'pie'
},
title: {
text: 'Car Sales by Region'
},
xAxis: {
type: 'category'
},
yAxis: {
title: {
text: 'Total percent Car Sales'
}
},
legend: {
enabled: true
},
plotOptions: {
series: {
borderWidth: 0,
dataLabels: {
enabled: true,
format: '{point.y:.1f}%'
}
}
},
tooltip: {
headerFormat: '<span style="font-size:11px">{series.name}</span><br>',
pointFormat: '<span style="color:{point.color}">{point.name}</span>: <b>{point.y:.2f}%</b> of total<br/>'
},
"series": [
{
"name": "Years",
"colorByPoint": true,
"data": [
{
"name": "Asia",
"y": 62.74,
"drilldown": "Asia"
},
{
"name": "Europe",
"y": 10.57,
"drilldown": "Europe"
},
{
"name": "America",
"y": 7.23,
"drilldown": "America"
},
{
"name": "Australia",
"y": 5.58,
"drilldown": "Australia"
},
]
}
],
"drilldown": {
"series": [
{
"name": "Asia",
"id": "Asia",
"data": [
{
"name": "India",
"y": 0.1
},
{
"name": "Sri Lanka",
"y": 0.2
},
{
"name": "Japan",
"y": 0.3
},
{
"name": "Sigapoore",
"y": 0.4
}
]
},
{
"name": "Europe",
"id": "Europe",
"data": [
{
"name": "UK",
"y": 0.1
},
{
"name": "Russia",
"y": 0.2
},
{
"name": "France",
"y": 0.3
},
{
"name": "Germany",
"y": 0.4
}
]
},
{
"name": "America",
"id": "America",
"data": [
{
"name": "North America",
"y": 0.3
},
{
"name": "South America",
"y": 0.4
}
]
},
{
"name": "Australia",
"id": "Australia",
"data": [
{
"name": "New Zeeland",
"y": 0.1
},
{
"name": "Australia",
"y": 0.5
}
]
}
]
}
});发布于 2018-09-20 16:23:36
您需要实现一个函数,该函数将对您拥有的所有图表进行迭代,并在其中基于您之前单击的点对具有相同索引的点调用doDrilldown()函数。调用创建的函数的最佳位置是chart.events.drilldown和chart.events.drillup处理程序。
下面是示例函数和用法:
function syncCharts(e, chart) {
return e.type === 'drilldown' ?
Highcharts.charts.forEach(c => {
if (c !== chart) {
var series = c.series[0],
point = series.points[e.point.index];
point.doDrilldown()
}
}) :
Highcharts.charts.forEach(c => {
c.drillUp();
})
}用法:
chart: {
type: 'column',
events: {
drilldown(e) {
syncCharts(e, this)
},
drillup(e) {
syncCharts(e, this)
}
}
},现场示例: https://jsfiddle.net/9am0srkq/
接口参考:
https://api.highcharts.com/highcharts/chart.events.drilldown
https://stackoverflow.com/questions/52419948
复制相似问题