python用pyecharts画矩形树图实例

 更新时间:2022年01月20日 16:48:44   作者:林老头ss  
大家好,本篇文章主要讲的是python用pyecharts画矩形树图实例,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下

一、概念介绍

矩形树图(Treemap),即矩形式树状结构图,利用矩形的面积表示数值的大小,颜色用于类别区分,常用于呈现多类别的一维数值比较,易读性强;基于树状的功能,在结构图中可以同时呈现数据层次的信息。

示例如下:

· 对比常见的柱状图和条形图,矩形树图弥补了以下三个缺点:

1、当我们的数据是多类别且每个类别只有一个数值时,我们用柱状图会浪费很多的空间,而且显得单调。

2、当数据间差异较大(235 vs 18),会是对我们柱状图的纵坐标设定带来困扰,忽略极差会稀释我们小值类的差异。(当然 ,如果我们的大值只有那么一两个,可以单拎出来处理)

3、柱状图无法呈现数据间的层级结构

二、数据展示

我们的目的是为了呈现类间数值大小差异,如果有第二层,也顺便比较第二层的占比情况。

为了展示多各类别,我们利用的是省份的数据,excel表格中呈现如下:

 第二层、第三层为了树状的呈现而随机生成,也是为了说明,树层结构并不要求每个节点都有枝叶。

三、数据导入

我们先绘制只有一维的,只需要输入【省份】【关注类】两个列,这个其实更常用一点(我的角度)

province_type1 = pd.DataFrame(pd.read_excel('./各省市上市公司个数/矩形树图示例.xlsx'))
tree = []
name = [province_type1['省份'][i]+'\n'+str(province_type1['关注类A'][i]) for i in range(len(province_type1))]
for i in range(len(province_type1)):
    dic = {}
    dic["value"],dic["name"] = int(province_type1['关注类A'][i]),name[i]
    tree.append(dic)

①name--列表型数据结构,用于存放每个数据的label,这里我为了同时呈现数据对应的省份和大小,中间用了换行符(不用的话,在我们的树图上是一行,不好看)

②绘制矩形树图需要的是list,list里面是字典,key名指定为"name","value"。

③一定要注意的是,如果你画出来的图没有数据或者没有显示,检查是不是读excel数据中出现了问题,即上述代码中int的位置。

用于绘制treemap的数据结构如下所示:

四、图像绘制 

tm = (
      TreeMap()
      .add("关注类A",tree)
      .set_series_opts(label_opts=opts.LabelOpts(position='inside'))
      .set_global_opts(title_opts=opts.TitleOpts(title = '',subtitle = '2022/1/18-林老头ss'))
      )
 
tm.render('./绘图结果/矩形树图-例一.html')

position---指定label,即我们的name的位置,inside会居中显示。如果不加,默认top,在每个矩形上方显示。

结果如下所示:

 由上图可知,广东省、浙江省和江苏省在随机数据中排名前三。受显示区域的限制,数据较小或名字过长的矩形往往不能显示完全,需要交互式放大其数值。

五、树形结构

在加入树形结构后,我们需要在代码中相应增加key为“children"的数据

from pyecharts.charts import Page,TreeMap
from pyecharts import options as opts
import pandas as pd
import math
province_type1 = pd.DataFrame(pd.read_excel('./矩形树图示例.xlsx'))
tree = []
name = [province_type1['省份'][i]+'\n'+str(province_type1['关注类A'][i]) for i in range(len(province_type1))]
for i in range(len(province_type1)):
    dic = {}
    dic["value"],dic["name"] = int(province_type1['关注类A'][i]),name[i]
    if math.isnan(province_type1['关注类A-1'][i]) ==0:
        dic["children"] = [
                            {"name":province_type1['省份'][i]+"A-1:"+str(province_type1['关注类A-1'][i]),"value":int(province_type1['关注类A-1'][i])},
                            {"name":province_type1['省份'][i]+"A-2:"+str(province_type1['关注类A-1'][i]),"value":int(province_type1['关注类A-2'][i])}
                         ]
    if math.isnan(province_type1['关注类A1-1'][i]) ==0:
        dic["children"][0]["children"] = [
                                        {"name":"A1-1:"+str(province_type1['关注类A1-1'][i]),"value":int(province_type1['关注类A1-1'][i])},
                                        {"name":"A1-2:"+str(province_type1['关注类A1-1'][i]),"value":int(province_type1['关注类A1-2'][i])}
                                        ]
    tree.append(dic)
 
tm = (
      TreeMap()
      .add("关注类A的树",tree)
      .set_series_opts(label_opts=opts.LabelOpts(position='inside'))
      .set_global_opts(title_opts=opts.TitleOpts(title = '加油呀朋友们~',subtitle = '2022/1/18-林老头ss'))
      )
 
tm.render('./绘图结果/矩形树图-例二.html')

 如果没有枝叶的类,则不需要在"name""value"平级上加"children",如果枝叶中有两个以上类别,相当于是一个新的树,需要增加“children”,结构和树形一致,如下所示:

【“name”:“父节点”,

    "value": number,

   "children":【{“name”:“子节点一”,“value”:number},

                       {“name”:“子节点二”,“value”:number},

                       {“name”:“子节点三”,“value”:number}

                     】

子序列在显示区域允许的情况下,可以继续按上述结构增加。

绘制结果如下所示:

从上图我们可以看到,尽管我们为父类命名,但显示的结果只有最小类的名称和数值。

pyecharts图像交互性较强,可以通过点击不断聚焦类,放大图像,但由于不知道怎么呈现给大家,还是鼓励大家自己动手操作去探索叭~

总结

到此这篇关于python用pyecharts画矩形树图实例的文章就介绍到这了,更多相关python pyecharts画矩形树图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python+Django+apache的配置方法详解

    python+Django+apache的配置方法详解

    这篇文章主要介绍了python+Django+apache的配置方法,详细分析了python+Django+apache的安装与配置步骤,并分析了相关注意事项,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • 新年福利来一波之Python轻松集齐五福(demo)

    新年福利来一波之Python轻松集齐五福(demo)

    这篇文章主要介绍了新年福利来一波之Python轻松集齐五福的小demo,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • Python实现求最大公约数及判断素数的方法

    Python实现求最大公约数及判断素数的方法

    这篇文章主要介绍了Python实现求最大公约数及判断素数的方法,涉及Python算数运算的相关技巧,需要的朋友可以参考下
    2015-05-05
  • Win10 GPU运算环境搭建(CUDA10.0+Cudnn 7.6.5+pytroch1.2+tensorflow1.14.0)

    Win10 GPU运算环境搭建(CUDA10.0+Cudnn 7.6.5+pytroch1.2+tensorflow1.

    熟悉深度学习的人都知道,深度学习是需要训练的,本文主要介绍了Win10 GPU运算环境搭建,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 解析django的csrf跨站请求伪造

    解析django的csrf跨站请求伪造

    本文主要介绍了解析django的csrf跨站请求伪造,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Python与Matlab混合编程的实现案例

    Python与Matlab混合编程的实现案例

    本文主要介绍了Python与Matlab混合编程的实现案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Python字符串格式化%s%d%f详解

    Python字符串格式化%s%d%f详解

    这篇文章主要介绍了Python字符串格式化%s%d%f详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • python3中_from...import...与import ...之间的区别详解(包/模块)

    python3中_from...import...与import ...之间的区别详解(包/模块)

    Python编码第一步是导入模块,有时候用import ***有时候用from...import,下面这篇文章主要给大家介绍了关于python3中_from...import...与import ...之间区别的相关资料,需要的朋友可以参考下
    2022-08-08
  • Python模块介绍与使用详细讲解

    Python模块介绍与使用详细讲解

    这篇文章主要介绍了Python模块介绍与使用详细讲解,包括模块的相关概念和使用方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • python爬取招聘要求等信息实例

    python爬取招聘要求等信息实例

    在本篇文章里小编给大家整理了关于python爬取招聘要求等信息实例内容,有兴趣的朋友们可以学习下。
    2020-11-11

最新评论