什么是Tree Map?
树状图(Treemap),是用于展现有群组、层次关系的比例数据的一种分析工具,它通过矩形的面积、排列和颜色来显示复杂的数据关系,并具有群组、层级关系展现功能,能够直观体现同级之间的比较。
树状图由马里兰大学教授Ben Shneiderman于上个世纪90年代提出,起初是为了找到一种有效了解磁盘空间使用情况的方法(引自知乎上叶小烨的回答)。
Python实现
例如我们利用Tree Map来绘制某些关键科学问题在期刊中出现的频次,如机器学习方法在地下水位埋深中的预测在不同期刊中出现的频次,以下是示例数据。
import matplotlib.pyplot as plt
import squarify
# 示例数据,\n是换行,由于字太长出了矩形框做了换行处理
categories = ["Journal of Hydrology", "Geocarto International", "Water",
"Science of the\n Total Environment", "Water\n Resources\n Research",
"Agricultural\n Water\n Management"]
values = [19, 14, 7, 6, 4, 4]
# 颜色映射,你可以根据需要修改
color = [0.1, 0.5, 0.9, 0.3, 0.7, 0.2]
plt.figure(figsize=(8, 6)) # 通过设置 figsize 调整图形大小
# 绘制 Tree Map,size是矩形的大小,根据值来绘制不同的大小
squarify.plot(sizes=values, label=categories, color=plt.cm.Paired(color), alpha=0.7
, text_kwargs={'fontsize': 12})
# 设置标题
plt.title("Tree Map")
# 隐藏坐标轴
plt.axis('off')
# 显示图形
plt.show()
结果展示:
如果想要设置亚组也是可以的,即一个大类(主要组)中包含多个小类(亚组)。
代码展示,以下是示例数据:
import plotly.express as px
# 示例数据框
data = dict(
main_group=["Group1", "Group1", "Group1", "Group1", "Group2", "Group2", "Group3"],
sub_group=["SubgroupA1", "SubgroupA2", "SubgroupA3", "SubgroupA4", "SubgroupB1", "SubgroupB2", "SubgroupC"],
value=[5, 5, 10, 5, 8, 12, 20]
)
# 创建Tree Map图
fig = px.treemap(
data,
path=['main_group', 'sub_group'], # 指定数据的层次结构
values='value',
title='Tree Map with Subgroups',
color='main_group', # 使用主要组列作为颜色
color_discrete_map={'Group1': 'lightblue', 'Group2': 'lightpink',
'Group3': 'lightgreen'}, # 自定义颜色映射
)
# 设置标签字体大小
fig.update_layout(
font=dict(size=20)
)
# 显示图形
fig.show()
结果展示: