数据可视化实验:比例数据可视化(板块层级图)

一、引言与实验原理

板块层级图(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
)
  • 核心参数
    • sizesaisle_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库的简洁接口让复杂层级结构的可视化变得高效,但也需注意参数设置的逻辑,如面积依据与颜色映射的数据源需合理区分,避免混淆核心指标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值