首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >局部整体(六)利用python绘制树状图

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

作者头像
HsuHeinrich
发布于 2024-11-23 00:42:54
发布于 2024-11-23 00:42:54
50102
代码可运行
举报
文章被收录于专栏:HsuHeinrichHsuHeinrich
运行总次数:2
代码可运行

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

树状图( Dendrogram)简介

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

快速绘制

基于dendrogram

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()

基于pyecharts

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 基本树图

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()

定制多样化的树状图

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

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

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

修改参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()

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

更多用法可参考树图 Tree[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( 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()
  • 发散树图 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快速绘制树状图。并通过修改参数或者辅以其他绘图知识自定义各种各样的树状图来适应相关使用场景。 共勉~

参考资料

[1]

scipy.cluster.hierarchy.dendrogram: https://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.dendrogram.html

[2]

树图 Tree: https://gallery.pyecharts.org/#/Tree/README

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-09-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HsuHeinrich 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
流程图(二)利用python绘制网络图
网络图使用节点和连接线来显示事物之间的连接关系,用于说明实体之间的关系。一般分为定向网络图和非定向网络图。
HsuHeinrich
2024/12/24
2980
流程图(二)利用python绘制网络图
pyecharts-13-绘制漏斗图
漏斗图在电商领域中观察用户转化率的情形使用非常普遍,本文通过一个模拟的商城用户行为的例子来绘制漏斗图
皮大大
2021/03/01
2.8K0
数据可视化第二版-03部分-07章-局部与整体
本系列博客为基于《数据可视化第二版》一书的教学资源博客。本文主要是第07章-局部与整体可视化的案例相关。
IT从业者张某某
2023/10/16
3720
数据可视化第二版-03部分-07章-局部与整体
2万字用Python探索金庸小说世界
本文从传统匹配逻辑分析过渡到机器学习的词向量,全方位进行文本分析,值得学习,干货满满。
可以叫我才哥
2022/11/11
7900
2万字用Python探索金庸小说世界
利用Python分析快手APP全国大学生用户数据(2022 年初赛第四题 )
背景:利用Python分析快手APP全国大学生用户数据,发现: 哪个学校的学生最喜欢使用快手APP Android、IOS、PC三大平台用户占比份额 全国哪些城市(学校所在地)的学生使用频次最高 全国哪些省份的生源最喜欢使用快手APP ...... 数据:快手APP大学生用户分析数据.csv 数据结构如下(字段名都为中文):
繁依Fanyi
2023/05/03
5360
pyecharts-14-页面组件Page
Pyecharts有一个非常强大的功能,就是能够将多个图形同时放在一个HTML页面中。这种方式和其他库的绘制多个子图的方式的区别在于:Pyecharts中能够自定义位置和图形大小。
皮大大
2021/03/01
4.5K1
pyecharts-12-涟漪图和日历图
本文中介绍的是如何利用pyecharts来绘制涟漪散点图和日历图,本文是自己依照官网的整理和学习,具体例子请移步至官网
皮大大
2021/03/01
9460
pyecharts-6-绘制地图
当绘制具体某个省份的地图时候,需要在地级市后面加上一个\color{red}{市},否则不能出图:
皮大大
2021/03/01
1.2K0
pyecharts-6-绘制地图
数据可视化基础与应用-07-数据可视化第二版各种类型图表的绘制优化版
本系列博客为基于《数据可视化第二版》一书的教学资源博客。本文主要是第6章,比较与排序可视化的案例相关。
IT从业者张某某
2024/04/03
5120
数据可视化基础与应用-07-数据可视化第二版各种类型图表的绘制优化版
pyecharts全家桶,一招学会python可视化
pyecharts一直被誉为python可视化的神器,因为它只需较少的代码既可以绘制非常漂亮的图形
龙哥
2021/01/25
1.2K0
pyecharts全家桶,一招学会python可视化
干货 | 使用pyecharts绘制交互式动态地图
说到pyecharts,相信很多人不会陌生,一个优秀的python可视化包。 pyecharts是中国人开发的,相比较matplotlib、seaborn等老牌可视化库,pyecharts是十分符合国内用户习惯的,尤其在地理空间图表方面。 本文是想试探一下pyecharts在绘制地理图表方面的功底如何,那就开始吧!
派大星的数据屋
2022/04/02
1.4K0
干货 | 使用pyecharts绘制交互式动态地图
趋势(七)利用python绘制日历热图
日历热图通过将事件聚合到日历网格中进行可视化分析,针对时序类数据特征较为直观,其中以github代码热图而知名。
HsuHeinrich
2024/12/20
2300
趋势(七)利用python绘制日历热图
4种更快更简单实现Python数据可视化的方法
数据可视化是数据科学或机器学习项目中十分重要的一环。通常,你需要在项目初期进行探索性的数据分析(EDA),从而对数据有一定的了解,而且创建可视化确实可以使分析的任务更清晰、更容易理解,特别是对于大规模的高维数据集。在项目接近尾声时,以一种清晰、简洁而引人注目的方式展示最终结果也是非常重要的,让你的受众(通常是非技术人员的客户)能够理解。
CDA数据分析师
2018/12/24
9540
聚类-层次聚类(谱系聚类)算法
层次聚类(Hierarchical Clustreing)又称谱系聚类,通过在不同层次上对数据集进行划分,形成树形的聚类结构。很好体现类的层次关系,且不用预先制定聚类数,对大样本也有较好效果。
唔仄lo咚锵
2022/11/30
5.5K0
聚类-层次聚类(谱系聚类)算法
致CSDN读者的一些话:感恩这十年的陪伴,不负遇见,短暂消失
从2010年我来到CSDN,再到2013年我撰写第一篇博客,转眼已经过去十年。590篇原创文章,786万次阅读量,19万位关注博友,这一个个数字的背后,是我3000多天的默默付出,也是我写下近千万文字的心血。
Eastmount
2021/12/03
7320
致CSDN读者的一些话:感恩这十年的陪伴,不负遇见,短暂消失
流程图(四)利用python绘制漏斗图
漏斗图经常用于展示生产经营各环节的关键数值变化,以较高的头部开始,较低的底部结束,可视化呈现各环节的转化效率与变动大小。一般重点关注落差较大的环节。
HsuHeinrich
2025/01/07
2030
流程图(四)利用python绘制漏斗图
各种各种的水球图全员报到
上周的动态图大家应该看得很过瘾吧!小编今天给大家带来了各式各样的水球图,虽然绘制简单,但在我们的日常生活中可是用处很大的哦~~~
数据山谷
2021/01/08
5420
8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表
2023年的中秋节和国庆节即将来临,好消息是,它们将连休8天!这个长假为许多人提供了绝佳的休闲机会,让许多人都迫不及待地想要释放他们被压抑已久的旅游热情,所以很多朋友已经开始着手规划他们的旅游行程。
松鼠爱吃饼干
2023/09/02
3560
8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表
python-pyecharts 数据分析原来可以这么炫酷
Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。
大家一起学编程
2021/12/13
9210
python-pyecharts 数据分析原来可以这么炫酷
MySQL50-13-习题及答案汇总
饼图在实际的工作还是会经常使用,能够很清晰的显示各类数据和占比情况,曾经在工作中绘制了环饼图和多饼图的结合。本文中介绍的是如何利用Pyecharts绘制饼图和进阶的环状饼图和玫瑰图
皮大大
2021/03/01
4960
MySQL50-13-习题及答案汇总
推荐阅读
相关推荐
流程图(二)利用python绘制网络图
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档