可視化庫Highcharts-6-圖形下鑽

Highcharts-6—下鑽圖形

本文中只講解一個圖形的製作:下鑽圖

下鑽表示的是通過層級的方式來展示數據,比如我們想查看國內人口數的佔比情況,我們可以先看各個省份的情況,接着我們想看具體某個省中各個地級市的佔比,這就是通過下鑽方式實現。

代碼

# -*- coding: utf-8 -*-

from highcharts import Highchart
H = Highchart(width=850, height=400)

# 第一層級的數據
data = [{  # 第一層級的數據
            'name': "Microsoft Internet Explorer", # 名字
            'y': 56.33,  # 數據
            'drilldown': "Microsoft Internet Explorer"  # 下鑽的名字
        }, {
            'name': "Chrome",
            'y': 24.030000000000005,
            'drilldown': "Chrome"
        }, {
            'name': "Firefox",
            'y': 10.38,
            'drilldown': "Firefox"
        }, {
            'name': "Safari",
            'y': 4.77,
            'drilldown': "Safari"
        }, {
            'name': "Opera",
            'y': 0.9100000000000001,
            'drilldown': "Opera"
        }, {
            'name': "Proprietary or Undetectable",
            'y': 0.2,
            'drilldown': None
        }]

# 第二層級的數據
# data_1的全部數值加起來就是data中第一個元素的值
data_1 = [  # 對一個第一層級的子數據
    ["v11.0", 24.13],
    ["v8.0", 17.2],
    ["v9.0", 8.11],
    ["v10.0", 5.33],
    ["v6.0", 1.06],
    ["v7.0", 0.5]
]

data_2 = [
    ["v40.0", 5],
    ["v41.0", 4.32],
    ["v42.0", 3.68],
    ["v39.0", 2.96],
    ["v36.0", 2.53],
    ["v43.0", 1.45],
    ["v31.0", 1.24],
    ["v35.0", 0.85],
    ["v38.0", 0.6],
    ["v32.0", 0.55],
    ["v37.0", 0.38],
    ["v33.0", 0.19],
    ["v34.0", 0.14],
    ["v30.0", 0.14]      
]

data_3 = [
    ["v35", 2.76],
    ["v36", 2.32],
    ["v37", 2.31],
    ["v34", 1.27],
    ["v38", 1.02],
    ["v31", 0.33],
    ["v33", 0.22],
    ["v32", 0.15]
]

data_4 = [
    ["v8.0", 2.56],
    ["v7.1", 0.77],
    ["v5.1", 0.42],
    ["v5.0", 0.3],
    ["v6.1", 0.29],
    ["v7.0", 0.26],
    ["v6.2", 0.17]
]

data_5 = [
    ["v12.x", 0.34],
    ["v28", 0.24],
    ["v27", 0.17],
    ["v29", 0.16]
]

options = {
    'chart': {  
        'type': 'column'  # 表的類型:柱狀圖
    },
    'title': {  # 主標題
        'text': 'Browser market shares. January, 2015 to May, 2015'
    },
    'subtitle': {  # 副標題
        'text': 'Click the columns to view versions. Source: <a href="http://netmarketshare.com">netmarketshare.com</a>.'
    },
    'xAxis': {  # x軸
        'type': 'category'
    },
    'yAxis': {  # y軸
        'title': {
            'text': 'Total percent market share'
        }

    },
    '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/>'
    },  
}
   
# 添加配置項
H.set_dict_options(options)

# 添加主數據
H.add_data_set(data, 'column', "Brands", colorByPoint= True)

# 添加下鑽數據
# add_drilldown_data_set(data, series_type, id, **kwargs)
H.add_drilldown_data_set(data_1, 'line', 'Microsoft Internet Explorer',name='Microsoft Internet Explorer' )
H.add_drilldown_data_set(data_2, 'column', 'Chrome', name='Chrome')
H.add_drilldown_data_set(data_3, 'pie', 'Firefox', name='Firefox')   # pie表示下鑽圖形
H.add_drilldown_data_set(data_4, 'column', 'Safari', name='Safari')
H.add_drilldown_data_set(data_5, 'column', 'Opera', name='Opera')

H

效果

整體效果

下鑽效果

當我們選擇其中某個圖形進行點擊的時候,會展示其下面的圖形和數據,比如我們選擇第一個:

下鑽的圖形展示的是折線圖,因爲我們指定的是line類型:

如果我們想回到主圖中,點擊右上角的如圖位置:

選擇第3個圖形,我們選擇的是餅圖pie,看下實際的效果:

這便是下鑽圖表的效果👍

問題

問題出現

問題:目前在jupyter notebook中的時候使用的是python-highcharts運行的結果不能下鑽到下一層級中

問題所在

打印出返回的源碼

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <link href="https://www.highcharts.com/highslide/highslide.css" rel="stylesheet" />
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
        <script type="text/javascript" src="https://code.highcharts.com/6/highcharts.js"></script>
        <script type="text/javascript" src="https://code.highcharts.com/6/highcharts-more.js"></script>
        <script type="text/javascript" src="https://code.highcharts.com/6/modules/heatmap.js"></script>
        <script type="text/javascript" src="https://code.highcharts.com/6/modules/exporting.js"></script>
        <script type="text/javascript" src="http://code.highcharts.com/modules/drilldown.js"></script>
    </head>
    <body style="margin:0;padding:0">
                <div id="container" style="width:850px;height:400px;">Loading....</div>
    <script>
        $(function(){
            Highcharts.setOptions({"global": {}, "lang": {}});
            var option = {"chart": {"renderTo": "container", "width": 850, "height": 400, "type": "column"}, "colors": {}, "credits": {"enabled": false}, "drilldown": {}, "exporting": {}, "labels": {}, "legend": {"enabled": false}, "loading": {}, "navigation": {}, "pane": {}, "plotOptions": {"series": {"borderWidth": 0, "dataLabels": {"enabled": true, "format": "{point.y:.1f}%"}}}, "series": {}, "subtitle": {"text": "Click the columns to view versions. Source: <a href=\"http://netmarketshare.com\">netmarketshare.com</a>."}, "title": {"text": "Browser market shares. January, 2015 to May, 2015"}, "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/>"}, "xAxis": {"type": "category"}, "yAxis": {"title": {"text": "Total percent market share"}}};
            var drilldowndata = [{"data": [["v11.0", 24.13], ["v8.0", 17.2], ["v9.0", 8.11], ["v10.0", 5.33], ["v6.0", 1.06], ["v7.0", 0.5]], "type": "line", "name": "Microsoft Internet Explorer", "id": "Microsoft Internet Explorer"}, {"data": [["v40.0", 5], ["v41.0", 4.32], ["v42.0", 3.68], ["v39.0", 2.96], ["v36.0", 2.53], ["v43.0", 1.45], ["v31.0", 1.24], ["v35.0", 0.85], ["v38.0", 0.6], ["v32.0", 0.55], ["v37.0", 0.38], ["v33.0", 0.19], ["v34.0", 0.14], ["v30.0", 0.14]], "type": "column", "name": "Chrome", "id": "Chrome"}, {"data": [["v35", 2.76], ["v36", 2.32], ["v37", 2.31], ["v34", 1.27], ["v38", 1.02], ["v31", 0.33], ["v33", 0.22], ["v32", 0.15]], "type": "pie", "name": "Firefox", "id": "Firefox"}, {"data": [["v8.0", 2.56], ["v7.1", 0.77], ["v5.1", 0.42], ["v5.0", 0.3], ["v6.1", 0.29], ["v7.0", 0.26], ["v6.2", 0.17]], "type": "column", "name": "Safari", "id": "Safari"}, {"data": [["v12.x", 0.34], ["v28", 0.24], ["v27", 0.17], ["v29", 0.16]], "type": "column", "name": "Opera", "id": "Opera"}];
            option.drilldown.series = drilldowndata;
            var chart = new Highcharts.Chart(option);
            var data = [{"data": [{"name": "Microsoft Internet Explorer", "y": 56.33, "drilldown": "Microsoft Internet Explorer"}, {"name": "Chrome", "y": 24.030000000000005, "drilldown": "Chrome"}, {"name": "Firefox", "y": 10.38, "drilldown": "Firefox"}, {"name": "Safari", "y": 4.77, "drilldown": "Safari"}, {"name": "Opera", "y": 0.9100000000000001, "drilldown": "Opera"}, {"name": "Proprietary or Undetectable", "y": 0.2, "drilldown": null}], "type": "column", "name": "Brands", "colorByPoint": true}];
            var dataLen = data.length;
            for (var ix = 0; ix < dataLen; ix++) {
                chart.addSeries(data[ix]);
            }
    });
        </script>
    </body>
</html>

找了半天沒有發現問題所在,後來在stack overflow上有人遇到了同樣的問題:https://www.coder.work/article/5773029

問題解決

有人提出了問題的解決方案,原來模塊版本的不統一:

<script type="text/javascript" src="https://code.highcharts.com/modules/drilldown.js"></script>   
改成:
<script type="text/javascript" src="https://code.highcharts.com/6/modules/drilldown.js"></script>

我們上面src中的兩個鏈接發現:

  • 第一個是新的版本
  • 第二個是舊的版本

按照建議修改html代碼之後就能夠正常顯示下鑽的圖形。

待解決

目前顯示下鑽圖形是通過前端的html代碼實現的,在jupyter notebook如何直接在線顯示圖形還是沒有解決😭

感覺是下載highcharts的版本時候,模塊文件要統一下。後續跟進這個問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章