当前位置: 首页 > news >正文

绘制板块层级图

目录

【实验目的】

【实验原理】

【实验环境】

【实验步骤】

【实验总结】

【实验目的】

  1. 掌握数据文件读取
  2. 掌握数据处理的方法
  3. 实现板块层级图的绘制

【实验原理】

       板块层级图(treemap)是一种基于面积的可视化方式,通过每一个板块(通常为矩形)的尺寸大小进行度量。外部矩形代表父类别,而内部矩形代表子类别。我们也可以通过板块层级图简单的呈现比例关系,不过它更擅于呈现树状结构的数据。
        读取绘图所用的数据,并对数据进行处理将数据处理成我们可以使用的形式,绘制板块层级图,设置标签和标题。

【实验环境】

OS:win10

python:v3.8

【实验步骤】

一、安装pandas、matplotlib、seaborn、squarify

输入命令 pip install pandas/matplotlib/seaborn/squarify

二、读取数据

在这里我们使用pandas库中的read_csv函数来读取这3个数据文件。

import pandas as pdproducts_df=pd.read_csv("D:\\数据可视化\\第四章实验\\products.csv")
aiseles_df=pd.read_csv("D:\\数据可视化\\第四章实验\\aisles.csv")
departments_df=pd.read_csv("D:\\数据可视化\\第四章实验\\departments.csv")
# 打印数据集的前几行
print(departments_df.head().to_csv(sep='\t', na_rep='nan'))

数据读取的结果为:

三、数据处理

我们需要根据源表对目标表进行匹配查询,使用merge函数进行操作。

import pandas as pdproducts_df = pd.read_csv("D:\\数据可视化\\第四章实验\\products.csv")
aisles_df = pd.read_csv("D:\\数据可视化\\第四章实验\\aisles.csv")
departments_df = pd.read_csv("D:\\数据可视化\\第四章实验\\departments.csv")
# 打印数据集的前几行
# print(departments_df.head().to_csv(sep='\t', na_rep='nan'))order_products_prior_df = pd.merge(products_df, aisles_df, on='aisle_id', how='left')
order_products_prior_df = pd.merge(order_products_prior_df, departments_df, on='department_id', how='left')
order_products_prior_df.head()
temp = order_products_prior_df[['product_name', 'aisle', 'department']]
temp = pd.concat([order_products_prior_df.groupby('department')['product_name'].nunique().rename('products_department'),order_products_prior_df.groupby('department')['aisle'].nunique().rename('aisle_department')
], axis=1).reset_index()
temp = temp.set_index('department')
temp2 = temp.sort_values(by="aisle_department", ascending=False)# 添加打印语句输出匹配结果
print(temp2)

进行匹配操作后的数据:

四、绘制板块层级图

import matplotlib.colors
import squarifycmap = matplotlib.cm.viridis
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"
labels = ["%s\n%d aisle num\n%d products num" % label for label inzip(temp2.index, temp2.aisle_department, temp2.products_department)]
fig = plt.figure(figsize=(12, 10))
ax = fig.add_subplot(111, aspect="equal")
ax = squarify.plot(temp2.aisle_department, color=colors, label=labels, ax=ax, alpha=.7)
plt.show()

绘制结果:

# 设置x、y轴的属性:
ax.set_xticks([])
ax.set_yticks([])
#添加图表标题:
fig.suptitle("How are aisles organized within departments",fontsize=20)
#添加数据标签
img=plt.imshow([temp2.products_department],cmap=cmap)
img.set_visible(False)
fig.colorbar(img,orientation="vertical",shrink=.96)
fig.text(.76,.9,"numbers of products",fontsize=14)
plt.show()

板块层级图效果如下:

参考如下绘图代码,实现该板块层级图的绘制,并尽可能多地总结代码中所蕴含地中手电。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib
import squarify# 设置链式赋值警告为不显示
pd.options.mode.chained_assignment = None# 读取相关数据文件
products_df = pd.read_csv('D:\\数据可视化\\第四章实验\\products.csv')
aisles_df = pd.read_csv('D:\\数据可视化\\第四章实验\\aisles.csv')
departments_df = pd.read_csv('D:\\数据可视化\\第四章实验\\departments.csv')# 合并数据
order_products_prior_df = pd.merge(products_df, aisles_df, on='aisle_id', how='left')
order_products_prior_df = pd.merge(order_products_prior_df, departments_df, on='department_id', how='left')
order_products_prior_df.head()# 提取相关列并进行聚合操作
temp = order_products_prior_df[['product_name', 'aisle', 'department']]
temp = pd.concat([order_products_prior_df.groupby('department')['product_name'].nunique().rename('products_department'),order_products_prior_df.groupby('department')['aisle'].nunique().rename('aisle_department')
], axis=1).reset_index()
temp = temp.set_index('department')
temp2 = temp.sort_values(by="aisle_department", ascending=False)# 打印中间结果
print(temp)
print(temp2)# 设置一些绘图相关的初始变量(这里x、y、width、height未在后续代码中实际使用,可根据需求调整或删除)
x = 0
y = 0
width = 100
height = 100# 设置颜色映射相关
cmap = matplotlib.cm.viridis
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"# 生成标签
labels = ["%s\n%d aisle num\n%d products num" % label for label inzip(temp2.index, temp2.aisle_department, temp2.products_department)]# 创建图形和子图
fig = plt.figure(figsize=(12, 10))
ax = fig.add_subplot(111, aspect="equal")# 绘制树形图
ax = squarify.plot(temp2.aisle_department, color=colors, label=labels, ax=ax, alpha=.7)# 添加图形标题
fig.suptitle("How are aisles organized within departments", fontsize=20)# 去除坐标轴刻度
ax.set_xticks([])
ax.set_yticks([])# 添加颜色条相关设置
img = plt.imshow([temp2.products_department], cmap=cmap)
img.set_visible(False)
fig.colorbar(img, orientation="vertical", shrink=.96)
fig.text(.76, .9, "numbers of products", fontsize=14)# 显示图形
plt.show()

代码中蕴含的知识点:

1. 库的导入与使用

  • pandas:用于数据处理和分析。

    • pd.read_csv():从 CSV 文件中读取数据并创建DataFrame对象。

    • pd.merge():将两个或多个DataFrame按照指定的列进行合并,支持不同的合并方式(如leftrightinner等)。

    • DataFrame.groupby():根据指定的列对数据进行分组,可用于后续的聚合操作。

    • DataFrame.nunique():计算每列中唯一值的数量。

    • pd.concat():将多个SeriesDataFrame沿着指定的轴进行拼接。

    • DataFrame.set_index():将指定的列设置为DataFrame的索引。

    • DataFrame.sort_values():根据指定列的值对DataFrame进行排序。

  • matplotlib.pyplot:Python 中常用的绘图库,用于创建各种静态、交互式的图表。

    • plt.figure():创建一个新的图形窗口。

    • plt.add_subplot():在图形窗口中添加子图。

    • plt.imshow():显示图像,这里用于创建颜色条。

    • plt.colorbar():为图形添加颜色条。

    • plt.text():在图形中添加文本注释。

    • plt.show():显示绘制好的图形。

  • seaborn:基于matplotlib的统计数据可视化库,这里主要用于设置颜色调色板。

    • sns.color_palette():返回一个颜色调色板。

  • matplotlib:Python 中强大的绘图库,提供了丰富的绘图功能和工具。

    • matplotlib.cm.viridis:一个颜色映射对象,用于将数值映射到颜色。

    • matplotlib.colors.Normalize():用于将数据值归一化到指定的范围。

  • squarify:用于绘制树形图(Treemap)的库。

    • squarify.plot():根据给定的数据绘制树形图。

2. 数据处理与分析

  • 数据读取:使用pd.read_csv()函数从 CSV 文件中读取数据,并将其存储为DataFrame对象。

  • 数据合并:使用pd.merge()函数将多个DataFrame按照指定的列进行合并,以便进行后续的分析。

  • 数据聚合:使用groupby()nunique()方法对数据进行分组并计算唯一值的数量,从而得到每个部门的产品数量和通道数量。

  • 数据排序:使用sort_values()方法根据指定列的值对DataFrame进行排序,以便更好地展示数据。

3. 数据可视化

  • 树形图绘制:使用squarify.plot()函数绘制树形图,展示每个部门的通道数量,并根据产品数量对树形图的颜色进行映射。

  • 颜色映射:使用matplotlib.cm.viridis颜色映射对象和matplotlib.colors.Normalize()函数将产品数量映射到颜色,增强可视化效果。

  • 图形设置:使用plt.figure()plt.add_subplot()等函数创建图形窗口和子图,并设置图形的大小、标题、坐标轴刻度等属性。

  • 颜色条添加:使用plt.imshow()plt.colorbar()函数添加颜色条,用于说明颜色与产品数量之间的对应关系。

代码运行结果展示:

【实验总结】

        本次实验围绕绘制板块层级图展开,涵盖数据读取、处理以及可视化等关键环节。在实验中我们成功掌握了数据文件读取、处理方法以及板块层级图的绘制。通过pandas库的read_csv函数读取数据文件,利用mergegroupbynunique等函数对数据进行处理和聚合操作,最终使用squarify库绘制出板块层级图,并对图形进行了美化。

        我们深入理解了板块层级图的原理和应用场景,其基于面积可视化,能有效展示树状结构数据和比例关系。熟练掌握了多个 Python 库的使用,包括pandas用于数据处理与分析、matplotlibseaborn用于数据可视化基础设置、squarify用于绘制板块层级图 。学会了处理数据的技巧,如数据合并、分组聚合、排序等,以及设置图形属性、添加标题、标签和颜色条等可视化操作34

相关文章:

  • AI与机器人外科手术:如何用智能化技术提升手术精度与安全性?
  • docker镜像构建常用参数
  • 实战篇:在QEMU中编写和调试VHost/Virtio驱动
  • [4282]PHP跨境电商源码-多语言商城源码/支持代理+商家入驻+分销+等等众多功能/带详细安装
  • 网工笔记-网络层
  • IS论文分享Estimating the Impact of “Humanizing” Customer Service Chatbots
  • 《AI大模型应知应会100篇》第39篇:多模态大模型应用:文本、图像和音频的协同处理
  • 探针台维护方法
  • EasyRTC嵌入式音视频通信SDK智能安防与监控系统的全方位升级解决方案
  • [Python开发] 如何用 VSCode 编写和管理 Python 项目(从 PyCharm 转向)
  • 局域网传文件——基于flask实现
  • 亚马逊云科技2025战略解析:AI驱动下的全球生态重塑
  • uni-app vue3 实现72小时倒计时功能
  • 从普查到防控:ArcGIS洪水灾害全流程分析技术实战——十大专题覆盖风险区划/淹没制图/水文分析/洪水分析/淹没分析/项目交流,攻克防洪决策数据瓶颈!
  • 「Mac畅玩AIGC与多模态05」部署篇03 - 在 Mac 上部署本地向量化模型(Embedding Models)
  • Deepseek-v3+cline+vscode java自动化编程
  • codeforcesB. Alice‘s Adventures in Permuting
  • VSCode 查看文件的本地修改历史
  • 推荐 1 款 9.3k stars 的全景式开源数据分析与可视化工具
  • STM32完整内存地址空间分配详解
  • 总有黑眼圈是因为“虚”吗?怎么睡才能改善?
  • 看展览|建造上海:1949年以来的建筑、城市与文化
  • 泽连斯基承认乌情报部门刺杀俄军高官
  • 王星昊再胜连笑,夺得中国围棋天元赛冠军
  • 独家丨申万宏源研究所将迎来新所长:首席策略分析师王胜升任
  • 民航局:预计五一假期民航旅客运输量创同期历史新高,将加强价格管理