yas*_*i92 1 javascript charts synchronization highcharts drilldown
我的应用程序中有两个高图,一个是柱形图,另一个是饼图.在第一个柱形图中,我显示了多年来的汽车销售情况,并且在一年内向下钻取时显示销售额为几个季度.然后是一个单独的饼图,显示按地区划分的汽车销售情况.在向下钻取一个区域时,它显示所选区域中子区域的汽车销售.我想要的是同步这两个图表.例如,最初的柱形图显示了多年的销售额,饼图显示了区域内的销售额.当我点击一年时,它应向下钻取以按季度显示销售额,饼图也应该更新以按区域显示销售额,但仅在列图表中显示该选定年份.我尝试了几种方法,但无法得到解决方案.有没有解决这个问题.
以下是我使用的示例代码. 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
}
]
}
]
}
});
Run Code Online (Sandbox Code Playgroud)
您需要实现一个函数,该函数将迭代您拥有的所有图表,并在其内部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();
})
}
Run Code Online (Sandbox Code Playgroud)
用法:
chart: {
type: 'column',
events: {
drilldown(e) {
syncCharts(e, this)
},
drillup(e) {
syncCharts(e, this)
}
}
},
Run Code Online (Sandbox Code Playgroud)
实例: https ://jsfiddle.net/9am0srkq/
API参考:
https://api.highcharts.com/highcharts/chart.events.drilldown
https://api.highcharts.com/highcharts/chart.events.drillup
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |