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

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

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

局部整体(六)利用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制作可视化大屏全流程!(代码分享)
前两天发了一篇《用Python制作可视化大屏,特简单!》,留言区非常火爆,发现大家都对可视化部分非常感兴趣。
快学Python
2021/09/07
2.1K1
干货 | 使用pyecharts绘制交互式动态地图
说到pyecharts,相信很多人不会陌生,一个优秀的python可视化包。 pyecharts是中国人开发的,相比较matplotlib、seaborn等老牌可视化库,pyecharts是十分符合国内用户习惯的,尤其在地理空间图表方面。 本文是想试探一下pyecharts在绘制地理图表方面的功底如何,那就开始吧!
派大星的数据屋
2022/04/02
1.4K0
干货 | 使用pyecharts绘制交互式动态地图
excel绘制南丁格尔玫瑰图过于复杂,试试用python绘制南丁格尔玫瑰图!
前面向大家讲解了如何用excel绘制高大上的南丁格尔玫瑰图,对于经常用excel的人来说,其实是简单的,但经常用python来绘制图表的人,怎么会用excel来绘制自己想要的图表呢!所以今天教大家如何用python绘制南丁格尔玫瑰图。
Python与Excel之交
2021/08/05
1.4K0
python+echarts可视化—pyecharts
pyecharts是一个用于生成Echarts 图表的python库。Echarts(https://echarts.apache.org/examples/zh/index.html )是一个数据可视化JS库,做出来的图非常好看。pyecharts这个项目可以在python中也生成这种风格的图。具体效果图可以参见该网站https://pyecharts.herokuapp.com/。
生信编程日常
2020/04/01
1.4K0
python+echarts可视化—pyecharts
利用Python分析快手APP全国大学生用户数据(2022 年初赛第四题 )
背景:利用Python分析快手APP全国大学生用户数据,发现: 哪个学校的学生最喜欢使用快手APP Android、IOS、PC三大平台用户占比份额 全国哪些城市(学校所在地)的学生使用频次最高 全国哪些省份的生源最喜欢使用快手APP ...... 数据:快手APP大学生用户分析数据.csv 数据结构如下(字段名都为中文):
繁依Fanyi
2023/05/03
5230
python-pyecharts 数据分析原来可以这么炫酷
Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。
大家一起学编程
2021/12/13
9160
python-pyecharts 数据分析原来可以这么炫酷
流程图(二)利用python绘制网络图
网络图使用节点和连接线来显示事物之间的连接关系,用于说明实体之间的关系。一般分为定向网络图和非定向网络图。
HsuHeinrich
2024/12/24
2640
流程图(二)利用python绘制网络图
pyecharts-12-涟漪图和日历图
本文中介绍的是如何利用pyecharts来绘制涟漪散点图和日历图,本文是自己依照官网的整理和学习,具体例子请移步至官网
皮大大
2021/03/01
9340
pyecharts全家桶,一招学会python可视化
pyecharts一直被誉为python可视化的神器,因为它只需较少的代码既可以绘制非常漂亮的图形
龙哥
2021/01/25
1.1K0
pyecharts全家桶,一招学会python可视化
流程图(四)利用python绘制漏斗图
漏斗图经常用于展示生产经营各环节的关键数值变化,以较高的头部开始,较低的底部结束,可视化呈现各环节的转化效率与变动大小。一般重点关注落差较大的环节。
HsuHeinrich
2025/01/07
1910
流程图(四)利用python绘制漏斗图
致CSDN读者的一些话:感恩这十年的陪伴,不负遇见,短暂消失
从2010年我来到CSDN,再到2013年我撰写第一篇博客,转眼已经过去十年。590篇原创文章,786万次阅读量,19万位关注博友,这一个个数字的背后,是我3000多天的默默付出,也是我写下近千万文字的心血。
Eastmount
2021/12/03
7170
致CSDN读者的一些话:感恩这十年的陪伴,不负遇见,短暂消失
各种各种的水球图全员报到
上周的动态图大家应该看得很过瘾吧!小编今天给大家带来了各式各样的水球图,虽然绘制简单,但在我们的日常生活中可是用处很大的哦~~~
数据山谷
2021/01/08
5360
pyecharts-9-绘制桑基图
本文详解地介绍了如何制作桑基图,使用的可视化库是强大的Pyecharts(版本1.7.1,版本一致很重要)。文章将从如下几个方面进行介绍:
皮大大
2021/03/01
2.3K0
pyecharts-9-绘制桑基图
pyecharts-13-绘制漏斗图
漏斗图在电商领域中观察用户转化率的情形使用非常普遍,本文通过一个模拟的商城用户行为的例子来绘制漏斗图
皮大大
2021/03/01
2.8K0
2万字用Python探索金庸小说世界
本文从传统匹配逻辑分析过渡到机器学习的词向量,全方位进行文本分析,值得学习,干货满满。
可以叫我才哥
2022/11/11
7700
2万字用Python探索金庸小说世界
趋势(七)利用python绘制日历热图
日历热图通过将事件聚合到日历网格中进行可视化分析,针对时序类数据特征较为直观,其中以github代码热图而知名。
HsuHeinrich
2024/12/20
2140
趋势(七)利用python绘制日历热图
聚类-层次聚类(谱系聚类)算法
层次聚类(Hierarchical Clustreing)又称谱系聚类,通过在不同层次上对数据集进行划分,形成树形的聚类结构。很好体现类的层次关系,且不用预先制定聚类数,对大样本也有较好效果。
唔仄lo咚锵
2022/11/30
5.4K0
聚类-层次聚类(谱系聚类)算法
流程图(三)利用python绘制桑基图
1、桑基图经常用于能源、金融行业,对材料、成本的流动进行可视化分析。现在很多互联网行业还使用桑基图做用户流动性分析,能很好地观察数据成分的变动大小及变动方向。
HsuHeinrich
2025/01/01
3510
流程图(三)利用python绘制桑基图
Python将冰冰的第一条vlog并进行数据分析「建议收藏」
哔哩哔哩其实留了很多接口,可以供我们来获取数据。 首先打开目标网站,并查看网页源码,发现评论内容不在源码中,可以确认评论是动态生成的。于是进入开发者模式,查找返回的内容。
全栈程序员站长
2022/08/11
5310
Python将冰冰的第一条vlog并进行数据分析「建议收藏」
4种更快更简单实现Python数据可视化的方法
数据可视化是数据科学或机器学习项目中十分重要的一环。通常,你需要在项目初期进行探索性的数据分析(EDA),从而对数据有一定的了解,而且创建可视化确实可以使分析的任务更清晰、更容易理解,特别是对于大规模的高维数据集。在项目接近尾声时,以一种清晰、简洁而引人注目的方式展示最终结果也是非常重要的,让你的受众(通常是非技术人员的客户)能够理解。
CDA数据分析师
2018/12/24
9230
推荐阅读
相关推荐
Python制作可视化大屏全流程!(代码分享)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验