局部整体(六)利用python绘制树状图

news2024/9/20 21:08:04

局部整体(六)利用python绘制树状图

树状图( Dendrogram)简介

1

由一个根节点组成,根节点产生多个通过分支连接的子节点。常用于表示层次结构或显示聚类算法的结果。树状图既可以看明白数据的层次结构,也能明白指标间的「对比」。

快速绘制

  1. 基于dendrogram

    import pandas as pd
    from matplotlib import pyplot as plt
    from scipy.cluster.hierarchy import dendrogram, linkage
    import numpy as np
     
    # 导入数据
    url = 'https://raw.githubusercontent.com/holtzy/The-Python-Graph-Gallery/master/static/data/mtcars.csv'
    df = pd.read_csv(url)
    df = df.set_index('model')
    df = df.reset_index(drop=True)
    
    # 计算样本距离:对df执行层次聚类,并将结果存储在Z中
    # Ward方差最小化算法用来计算样本距离
    Z = linkage(df, 'ward')
    
    # 树状图
    dendrogram(Z, labels=df.index, leaf_rotation=90)
    
    # 标题
    plt.title('Hierarchical Clustering Dendrogram')
    # 轴标签
    plt.xlabel('sample index')
    plt.ylabel('distance (Ward)')
    
    plt.show()
    

    2

  2. 基于pyecharts

    # 基本树图
    
    from pyecharts import options as opts
    from pyecharts.charts import Tree
    
    # 自定义数据
    data = [
        {
            "children": [
                {"name": "B"},
                {
                    "children": [{"children": [{"name": "I"}], "name": "E"}, {"name": "F"}],
                    "name": "C",
                },
                {
                    "children": [
                        {"children": [{"name": "J"}, {"name": "K"}], "name": "G"},
                        {"name": "H"},
                    ],
                    "name": "D",
                },
            ],
            "name": "A",
        }
    ]
    c = (
        Tree()
        .add("", data)
        .set_global_opts(title_opts=opts.TitleOpts(title="基本树图"))
    )
    c.render_notebook()
    

    3

定制多样化的树状图

自定义树状图一般是结合使用场景对相关参数进行修改,并辅以其他的绘图知识。参数信息可以通过官网进行查看,其他的绘图知识则更多来源于实战经验,大家不妨将接下来的绘图作为一种学习经验,以便于日后总结。

通过dendrogram绘制多样化的树状图

更多用法可参考scipy.cluster.hierarchy.dendrogram

  1. 修改参数

    import pandas as pd
    from matplotlib import pyplot as plt
    from scipy.cluster.hierarchy import dendrogram, linkage, set_link_color_palette
    import numpy as np
    
    plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
     
    # 导入数据
    url = 'https://raw.githubusercontent.com/holtzy/The-Python-Graph-Gallery/master/static/data/mtcars.csv'
    df = pd.read_csv(url)
    df = df.set_index('model')
    
    # 计算样本距离
    Z = linkage(df, 'ward')
     
    
    # 初始化布局
    fig = plt.figure(figsize=(12,12))
    
    # 自定义标签
    plt.subplot(3, 2, 1) 
    dendrogram(Z, leaf_rotation=90, leaf_font_size=8, labels=df.index)
    plt.title('自定义标签')
    
    # 自定义颜色和颜色阈值
    plt.subplot(3, 2, 2) 
    set_link_color_palette(['#b30000','#996600', '#b30086']) # 颜色
    dendrogram(Z, color_threshold=240, above_threshold_color='grey') # 颜色阈值
    plt.axhline(y=240, c='grey', lw=1, linestyle='dashed')
    plt.title('自定义颜色和颜色阈值')
    
    # 簇截断-叶子数量
    plt.subplot(3, 2, 3) 
    dendrogram(Z, truncate_mode = 'lastp', p=4 ) 
    plt.title('簇截断-叶子数量')
    
    # 簇截断-显示层数
    plt.subplot(3, 2, 4) 
    dendrogram(Z, truncate_mode = 'level', p=2 ) 
    plt.title('簇截断-显示层数')
    
    # 水平方向-右
    plt.subplot(3, 2, 5) 
    dendrogram(Z, orientation="right", labels=df.index) 
    plt.title('水平方向-右')
        
    # 水平方向-左
    plt.subplot(3, 2, 6) 
    dendrogram(Z, orientation="left", labels=df.index) 
    plt.title('水平方向-左')
    
    
    fig.tight_layout() # 自动调整间距
    plt.show()
    

    4

    通过pyecharts绘制多样化的树状图

    更多用法可参考树图 Tree

    1. 径向树图

      import requests
      import pyecharts.options as opts
      from pyecharts.charts import Tree
      
      # 获取官方的数据
      url = "https://echarts.apache.org/examples/data/asset/data/flare.json"
      response = requests.get(url)
      data = response.json()  # 将响应内容解析为JSON
      
      # 绘制树图
      
      c = (
          Tree()
          .add(
              series_name="",
              data=[data],
              pos_top="18%",
              pos_bottom="14%",
              layout="radial",
              symbol="emptyCircle",
              symbol_size=7,
          )
          .set_global_opts(
              tooltip_opts=opts.TooltipOpts(trigger="item", trigger_on="mousemove"),
              title_opts=opts.TitleOpts(title="径向树图")
          )
      )
      
      c.render_notebook()
      

      5

    2. 发散树图

      import requests
      import pyecharts.options as opts
      from pyecharts.charts import Tree
      
      # 获取官方的数据
      url = "https://echarts.apache.org/examples/data/asset/data/flare.json"
      response = requests.get(url)
      data = response.json()  # 将响应内容解析为JSON
      
      c = (
          Tree()
          .add("", [data], collapse_interval=2, layout="radial")
          .set_global_opts(title_opts=opts.TitleOpts(title="发散树图"))
      )
      
      c.render_notebook()
      

      6

      总结

      以上利用scipy的dendrogram并结合matplotlib绘制树状图,也可通过pyecharts的Tree快速绘制树状图。并通过修改参数或者辅以其他绘图知识自定义各种各样的树状图来适应相关使用场景。

      共勉~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2150096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

兴业小知识|法拍房你不知道的省钱小技巧~划走可就亏大了

如果说二手房市场是买卖双方之间的博弈,那法拍房市场则是纯买方的心理游戏。 在法拍房竞拍过程中,有人稳如泰山,有人坐立不安,每一次的出价都是对相互底线的一番试探。 有激进竞拍,拍出天价的,有一举夺魁…

2024.9.20营养小题【2】(动态分配二维数组)

这道题里边涉及到了动态分配二维数组的知识点,不刷这道题我也不知道这个知识点,算是一个比较进阶一点的知识点了。 参考:C语言程序设计_动态分配二维数组_哔哩哔哩_bilibili【C/C 数据结构 】二维数组结构解析 - 知乎 (zhihu.com)

网络爬虫Request静态页面数据获取

在现代 Web 开发中,HTTP 请求(Request)是与服务器进行通信的核心操作。无论是在前端还是后端开发中,数据的获取、传递以及处理都离不开请求的应用。特别是在静态页面的数据获取中,使用请求可以将页面变得更加动态和互动,从而大大提升用户体验,使得页面内容更加丰富和灵活…

电风扇制造5G智能工厂物联数字孪生平台,推进制造业数字化转型

电风扇正悄然成为制造业数字化转型浪潮中的一颗璀璨新星。通过构建5G智能工厂物联数字孪生平台,电风扇制造业正以前所未有的速度和精度,推进着整个行业的智能化、网络化与个性化发展。5G技术的飞速发展,为制造业带来了前所未有的通信速度和低…

vue 入门一

参考&#xff1a;丁丁的哔哩哔哩 1.使用vue 1.1 使用CDN的方式使用Vue mount和<div id"counter">关联起来 1.2 vue中的createApp import { createApp } from "vue"; import App from "./App.vue"; createApp(App).mount("#app&qu…

【软件测试】如何设计测试用例? 设计测试用例常用的方法.

目录 一.什么是测试用例?二.总体设计测试用例的万能公式.2.1 功能性能界面兼容易用安全2.2 弱网测试2.3 安装卸载测试. 三. 常用设计具体测试用例的方法3.1 等价类3.2 边界值3.3 正交法3.3.1 正交表3.3.2 如何设计正交表,并根据正交表编写测试用例 3.4 判定表法3.4.1 根据判定…

红日药业携手实在智能,构建RPA数字员工平台满足业务一体化需求 | 实在RPA案例

近日&#xff0c;天津红日药业股份有限公司&#xff08;简称“红日药业”&#xff09;与实在智能达成合作&#xff0c;依托实在智能业内领先的AIRPA技术&#xff0c;红日药业着手构建企业数字员工平台&#xff0c;满足业务一体化需求&#xff0c;培育新质生产力&#xff0c;为企…

基于PHP的电脑线上销售系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于phpMySQL的电脑线上销售系…

小程序服务零工市场

零工市场小程序有着信息发布、岗位匹配、线上接单、零工人员保障险参保、技能培训、费用结算、完工确认、服务评价、纠纷调解等功能&#xff0c;为求职者和雇主搭建一座高效、便捷、精准的对接桥梁。 用工单位通过小程序的“雇主找人”&#xff0c;发布招聘信息&#xff0c;找到…

react-native连接android原生模块

目录 搭建react-native项目 搭建node和jdk的环境 搭建Android的环境 创建React-native项目 运行react-native项目 下载夜神模拟器 使用adb连接夜神浏览器。 运行react-native项目 编写原生安卓的apk android studio中编写原生代码 在React-native编写代码。 搭建rea…

【干货分享】2024软件测试面试题汇总

前言 本篇分享的软件测试面试题内容主要包括&#xff1a;测试总体、需求分析、测试计划、测试策略、测试用例、缺陷报告、测试总结报告、白盒测试、单元测试、集成测试、系统测试、验收测试等等26个模块。 1. 什么是软件测试&#xff1f; 答&#xff1a;为了发现程序中的错误…

滚动条指定距离滚动

/*** scroller 滚动条元素* to 滚动到位置* duration 滚动时间*/ function scrollLeftTo (scroller, to, duration) {let rafIdlet count 0const from scroller.scrollLeftconst frames duration 0 ? 1 : Math.round((duration * 1000) / 16)function cancel () {cancelAn…

学习CubeIDE——定时器开发

在b站上学习洋桃电子关于HAL库开发&#xff0c;发现使用CubeIDE是真的简单又方便。 实验现象&#xff1a;使用定时器来产生中断&#xff0c;中断程序是LED灯翻转 在我看来&#xff0c;定时器&#xff0c;是一个从0开始增1&#xff08;常规&#xff09;&#xff0c;增加到一定…

存量新篇,商机无限,2024中国重庆建博会将于下月开展

在步入存量房时代的全新篇章中&#xff0c;中国家居建材行业正孕育着前所未有的转型机遇与商业蓝海。重庆作为西南地区的璀璨明珠与战略要地&#xff0c;以前所未有的决心与力度&#xff0c;推进实施了旧改局改与以旧换新等一系列创新政策。 《关于加快推进中心城区旧城改造工…

心觉:小时候常听到的这些教导,正在禁锢你的人生,该翻身了

Hi&#xff0c;我是心觉&#xff0c;与你一起玩转潜意识、脑波音乐和吸引力法则&#xff0c;轻松掌控自己的人生&#xff01; 挑战每日一省写作175/1000天 小时候&#xff0c;我们常常被父母或老师教导&#xff1a; 不要去打扰别人 不要影响别人 不要出头 人多要往后站 …

【免费下载】信通院的DCMM标准解读

荐言&#xff1a;深入解读信通院DCMM标准&#xff0c;引领数据管理新高度在数字化转型的浪潮中&#xff0c;数据管理已成为企业核心竞争力的重要组成部分。中国信息通信研究院&#xff08;信通院&#xff09;发布的《数据管理能力成熟度评估模型》&#xff08;DCMM&#xff09;…

OpenAi assistant run always fails when called from PHP

题意&#xff1a;从 PHP 调用时&#xff0c;OpenAI 助理运行总是失败。 问题背景&#xff1a; The runs I create with the openai-php library fail direct in 100% of cases. What am I doing wrong? I do not have much experience with php but this is the test script.…

屏幕翻译软件实时工具有哪些?剧粉朋友看这里

日常生活的忙碌之余&#xff0c;观看剧集成为放松心情的绝佳方式。 但当遇到非母语的影视作品时&#xff0c;语言差异可能会让人感到难以投入。 幸运的是&#xff0c;现在有了屏幕翻译软件&#xff0c;我们不再需要为听不懂外语而烦恼。 这些软件能够在你观看剧集时即时翻译…

MySQL索引知识个人笔记总结(持续整理)

本篇笔记是个人整理的索引知识总结&#xff0c;刚开始有点乱&#xff0c;后续会一直边学边整理边总结 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。就好比索引就是数据的目录 索引结构 Btree索引,Hash索引,Full-text索引&#xff0c;R-tree(空…

SpringBoot+Vue+MySQL驾校预约管理系统

目录 前言 功能设计 系统实现 获取源码 博主主页&#xff1a;百成Java 往期系列&#xff1a;Spring Boot、SSM、JavaWeb、python、小程序 前言 随着社会的进步&#xff0c;各行各业都在充分利用信息化时代的优势。由于计算机技术的广泛应用和普及&#xff0c;各种信息系统…