基于python+pyecharts的矩形树状图(Treemap)


1.概述

矩形树状图(Treemap)是一种经常用来展示多层级数据的分析工具。主要是使用矩形的面积、颜色、来显示复杂的层级数据关系,能够直观体现同级数据之间的比较。目前制作Treemap的软件工具主要有Office 2016,R语言,python等,但可参考资源不算多。前期曾基于python语言,利用pygal可视化模块,分享制作Treemap过程。但利用pygal构建的Treemap标签排版仍有提高空间,现将利用pyecharts制作Treemap,标签展示进一步优化(源程序下载)。

2.实例

2.1安装pyecharts

首先安装pyecharts:
pip install pyecharts

2.2数据

我们选择国际货币基金组织(IMF)公布的2017年全球各国GDP作为基础数据,计算各国GDP占全球GDP的比例,并利用Treemap进行可视化展示。

2.3程序实现

(1)导入必须模块,定义Treemap参数(完整源程序下载)

1
2
3
4
from __ future __ import unicode_literals
from pyecharts import TreeMap
from pyecharts.engine import create_default_environment
from pyecharts_javascripthon.dom import window

(2)导入数据

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
data = [{
        "value": 0.3183,
        "name": "亚洲",
        "children": [
                 {"value": 0.1503, "name": "中国大陆"}
                ,{"value": 0.0610, "name": "日本"}
                ,{"value": 0.0327, "name": "印度"}
                ,{"value": 0.0192, "name": "韩国"}
                ,{"value": 0.0127, "name": "印尼"}
                ,{"value": 0.0121, "name": "中国港澳台"}
                ,{"value": 0.0106, "name": "土耳其"}
                ,{"value": 0.0086, "name": "沙特"}
                ,{"value": 0.0057, "name": "泰国"}
                ,{"value": 0.0054, "name": "伊朗"}]},
        {
        "value": 0.2072,
        "name": "欧洲",
        "children": [
                 {"value": 0.0461, "name": "德国"}
                ,{"value": 0.0328, "name": "英国"}
                ,{"value": 0.0323, "name": "法国"}
                ,{"value": 0.0242, "name": "意大利"}
                ,{"value": 0.0191, "name": "俄罗斯"}
                ,{"value": 0.0164, "name": "西班牙"}
                ,{"value": 0.0103, "name": "荷兰"}
                ,{"value": 0.0085, "name": "瑞士"}
                ,{"value": 0.0067, "name": "瑞典"}
                ,{"value": 0.0066, "name": "波兰"}]},
        {
        "value": 0.0337,
        "name": "南美洲",
        "children": [
                 {"value": 0.0257, "name": "巴西"}
                ,{"value": 0.0080, "name": "阿根廷"}]},
        {
        "value": 0.0173,
        "name": "大洋洲",
        "children": [
                {"value": 0.0173, "name": "澳大利亚"}]},
        {
        "value": 0.2777,
        "name": "北美洲",
        "children": [
                 {"value": 0.2426, "name": "美国"}
                ,{"value": 0.0207, "name": "加拿大"}
                ,{"value": 0.0144, "name": "墨西哥"}]},
        {
        "value": 0.1449,
        "name": "其他国家"}
]

(3)结果展示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#定义标签格式
def label_formatter(params):
    return params.name+"\n"+window.parseFloat(params.value*100).toFixed(2)+r'%'

treemap = TreeMap(width=800, height=1200)
treemap.add("2017年各国GDP占比", data, is_random=False, is_legend_show=True, line_opacity=0.5
            , is_label_show=True
            , label_text_size=11.6
            , label_pos='inside'
            , legend_orient='vertical'
            , label_formatter=label_formatter
            , is_more_utils=True) # 2017年各国GDP占比

#结果生成,html文件和png图片
#png图片的生成依赖于phantomjs, 需要进行安装
env = create_default_environment('html')
env.render_chart_to_file(treemap, path=r'C:\Users\Shinelon\Desktop\treemap.html', pixel_ratio=1.5)
env = create_default_environment('png')
env.render_chart_to_file(treemap, path=r'C:\Users\Shinelon\Desktop\treemap.png', pixel_ratio=1.5)

保存结果路径下产生treemap文件,以html文件为例,双击即可被浏览器打开,如图。

赞赏

微信赞赏支付宝赞赏

Have any Question or Comment?

One comment on “基于python+pyecharts的矩形树状图(Treemap)

chao

首先非常感谢您的分享~不过我在学习中遇到了一个问题,想向您请教一下~
虽然颜色区分了各大洲,但是颜色对应的各大洲的名称并没有显示,也就是说图例没有显示出来,这样对于数据展示来说就不能很清楚的知道颜色对应的大类是什么。虽然看到了你设置了is_legend_show=True,但是好像并没有起作用。我试了几个方式还是没有把图例做出来不知道您是否有新的方法了。希望得到您的指导。

Reply

发表评论

电子邮件地址不会被公开。 必填项已用*标注

分类目录

博客统计

  • 14,395 点击次数