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
的版本時候,模塊文件要統一下。後續跟進這個問題。