数据可视化实验:比例数据可视化(板块层级图)
一、引言与实验原理
板块层级图(treemap)是一种基于面积的可视化方式,通过每一个板块(通常为矩形)的尺寸大小进行度量。外部矩形代表父类别,而内部矩形代表子类别。我们也可以通过板块层级图简单的呈现比例关系,不过它更擅于呈现树状结构的数据。
下面我们将读取绘图所用的数据,并对数据进行处理将数据处理成我们可以使用的形式,绘制板块层级图,设置标签和标题。
二、实验目的与实验环境
本次实验学习的是比例数据可视化技术的操作方法。使用Python完成。主要包括:
- 掌握数据文件读取
- 掌握数据处理的方法
- 实现板块层级图的绘制
实验环境:
- OS:win11
- python:v3.11.5
三、实验步骤
1.安装pandas、matplotlib、seaborn、squarify
首先WIN+R调出“运行”并输入cmd进入终端
随后:
1、输入命令:pip install pandas
2、输入命令:pip install matplotlib
3、输入命令:pip install seaborn
4、输入命令:pip install squarify
2.读取数据
在这里我们使用pandas库中的read_csv函数来读取这3个数据文件。
数据读取的结果:
3.数据处理
我们需要根据源表对目标表进行匹配查询,使用 merge 函数进行操作。
进行匹配操作后的数据(按部门排序):
4.绘制板块层级图
1. 初始设置
x, y = 0, 0
width, height = 100, 100
cmap = matplotlib.cm.viridis
- 坐标与画布尺寸:初始化绘图起点
(0,0)
和默认画布尺寸100x100
。 - 颜色映射:使用Viridis颜色方案,颜色将映射到商品数量。
2. 数据归一化与颜色生成
mini, maxi = temp2.products_department.min(), temp2.products_department.max()
norm = matplotlib.colors.Normalize(vmin=mini, vmax=maxi)
colors = [cmap(norm(value)) for value in temp2.products_department]
colors[1] = "#FBFCFE" # 特殊设置第二个部门的颜色
- 归一化:将
products_department
(商品数量)的数值范围归一化到[0,1]
,便于映射到颜色。 - 颜色列表:为每个部门生成对应的颜色,颜色深浅表示商品数量的多少。
- 特殊颜色:手动将第二个部门的颜色设为浅灰色
#FBFCFE
。
3. 标签生成
labels = [
f"{dept}\n{aisle_num} 条通道\n{product_num} 种商品"
for dept, aisle_num, product_num in zip(
temp2.index,
temp2.aisle_department,
temp2.products_department
)
]
- 格式化标签:每个部门的标签包含三行信息:
- 部门名称(
temp2.index
) - 通道数量(
aisle_department
) - 商品种类数量(
products_department
)
- 部门名称(
4. 绘图基础设置
fig = plt.figure(figsize=(12, 10))
ax = fig.add_subplot(111, aspect="equal")
- 画布与子图:创建12x10英寸的画布,并添加一个保持宽高比的子图。
5. 绘制树状图
squarify.plot(
temp2.aisle_department,
color=colors,
label=labels,
ax=ax,
alpha=0.7
)
- 核心参数:
sizes
:aisle_department
列作为方块面积大小的依据(通道数量越多,方块越大)。color
:颜色列表,反映商品数量。label
:每个方块的标签。alpha
:透明度设置为0.7,增强视觉效果。
6. 图表装饰
fig.suptitle("各部门内通道与商品的分布关系", fontsize=20, y=1.02)
ax.set_xticks([])
ax.set_yticks([])
- 标题:主标题位置略微上移(
y=1.02
)避免重叠。 - 隐藏坐标轴:树状图无需坐标轴刻度。
7. 颜色条
img = plt.imshow([temp2.products_department], cmap=cmap)
img.set_visible(False)
fig.colorbar(img, orientation="vertical", shrink=0.96)
fig.text(0.76, 0.9, "商品种类数", fontsize=14, ha='center')
- 隐式图像:通过一个隐藏的图像(
set_visible(False)
)关联颜色映射,用于生成颜色条。 - 颜色条位置与标签:右侧垂直颜色条,标注“商品种类数”说明颜色含义。
板块层级图效果如下:
四、总结与心得
本次实验围绕数据可视化中的比例数据展示展开,重点学习了如何通过板块层级图直观呈现树状结构数据的分布关系。实验以Python为工具,结合pandas、matplotlib和squarify等库,从数据读取、处理到可视化逐步实现。通过merge函数对数据进行整合匹配,利用归一化方法将商品数量映射为颜色深浅,并以通道数量决定矩形面积大小,最终通过squarify库绘制出层次分明的板块层级图。过程中特别关注了标签的格式化设计以及颜色条的添加,使得图表在视觉上既能清晰展示部门间的比例关系,又能通过颜色梯度反映商品种类的差异。
在实验过程中,最深刻的体会是数据预处理的重要性。无论是数据的合并还是归一化操作,都直接影响最终可视化的准确性和可读性。例如,通过手动调整特定区块的颜色,能够有效突出关键信息或适配背景需求,这体现了细节处理在数据呈现中的价值。此外,squarify库的简洁接口让复杂层级结构的可视化变得高效,但也需注意参数设置的逻辑,如面积依据与颜色映射的数据源需合理区分,避免混淆核心指标。