Fork me on GitHub

Highcharts-7-下钻图制作

Highcharts-7—下钻图形

本文中只讲解一个图形的制作:下钻图

下钻表示的是通过层级的方式来展示数据,比如我们想查看国内人口数的占比情况,我们可以先看各个省份的情况,接着我们想看具体某个省中各个地级市的占比,这就是通过下钻方式实现。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# -*- 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运行的结果不能下钻到下一层级中

问题所在

打印出返回的源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!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

问题解决

有人提出了问题的解决方案,原来模块版本的不统一:

1
2
3
<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的版本时候,模块文件要统一下。后续跟进这个问题。

本文标题:Highcharts-7-下钻图制作

发布时间:2021年03月02日 - 17:03

原始链接:http://www.renpeter.cn/2021/03/02/Highcharts-7-%E4%B8%8B%E9%92%BB%E5%9B%BE%E5%88%B6%E4%BD%9C.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Coffee or Tea