首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同步两个highcharts以同时向下钻取

同步两个highcharts以同时向下钻取
EN

Stack Overflow用户
提问于 2018-09-20 15:36:57
回答 1查看 351关注 0票数 1

我的应用程序中有两个highcharts,一个是柱状图,另一个是饼图。在第一个柱状图中,我显示了几年的汽车销量,向下钻取一年,它显示了y个季度的销量。然后是一个单独的饼图,按地区显示汽车销量。在向下钻取一个地区时,它会按选定地区中的子地区显示汽车销量。我想要的是同步这两个图表。例如,最初的柱状图显示多年来的销售额,而饼图显示地区的销售额。当我单击某一年时,它应该向下钻取以按季度显示销售额,而饼图也应该更新为按地区显示销售额,但仅显示柱状图中选定年份的销售额。我尝试了几种方法,但都不能得到解决方案。有什么办法可以解决这个问题吗?

以下是我使用的示例代码。https://jsfiddle.net/yasirunilan/erqm86k7/15/

代码语言:javascript
复制
// 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
                    }
                ]
            }
        ]
    }
});
EN

回答 1

Stack Overflow用户

发布于 2018-09-20 16:23:36

您需要实现一个函数,该函数将对您拥有的所有图表进行迭代,并在其中基于您之前单击的点对具有相同索引的点调用doDrilldown()函数。调用创建的函数的最佳位置是chart.events.drilldownchart.events.drillup处理程序。

下面是示例函数和用法:

代码语言:javascript
复制
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();
    })
}

用法:

代码语言:javascript
复制
  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://api.highcharts.com/highcharts/chart.events.drillup

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52419948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档