python数据可视化技巧的100个练习 -- 43. 创建层次数据的圆形打包图
电商领域的客户希望使用圆形打包图来可视化他们的产品类别层次结构。他们提供了代表主要类别、子类别以及每个子类别中产品数量的层次数据。您的任务是生成一个圆形打包图,帮助他们更好地了解产品类别内的分布和关系。类别 A
子类别 A1:150 件产品
子类别 A2:100 件产品
类别 B
子类别 B1:200 件产品
子类别 B2:50 件产品
子类别 B3:75 件产品
类别 C
使用 Python 生成这些数据并创建圆形打包图。【数据生成代码示例】
import pandas as pd# 创建圆形打包图的层次数据data = { 'Category': ['A', 'A', 'B', 'B', 'B', 'C'], 'Subcategory': ['A1', 'A2', 'B1', 'B2', 'B3', 'C1'], 'Products': [150, 100, 200, 50, 75, 300]}# 转换为 DataFramedf = pd.DataFrame(data)df
【图表答案】
【代码答案】
import pandas as pd import matplotlib.pyplot as plt import squarify # 创建圆形打包图的层次数据 data = { 'Category': ['A', 'A', 'B', 'B', 'B', 'C'], 'Subcategory': ['A1', 'A2', 'B1', 'B2', 'B3', 'C1'], 'Products': [150, 100, 200, 50, 75, 300] } # 转换为 DataFrame df = pd.DataFrame(data) # 为圆形打包图聚合数据 agg_data = df.groupby(['Category', 'Subcategory']).sum().reset_index() # 为图表创建大小和标签 sizes = agg_data['Products'] labels = agg_data['Subcategory'] + ' (' + agg_data['Products'].astype(str) + ')' # 创建圆形打包图 fig, ax = plt.subplots(figsize=(10, 8)) squarify.plot(sizes=sizes, label=labels, alpha=0.7, ax=ax) ax.axis('off') plt.title('产品类别的圆形打包图') plt.show()
解题步骤
创建一个包含主要类别、子类别和每个子类别中产品数量的字典。将数据转换为 pandas DataFrame,便于后续操作。使用 groupby 按 'Category' 和 'Subcategory' 分组,并对 'Products' 求和,以获取每个子类别的总产品数量。从聚合数据中提取每个子类别的产品数量(sizes)。创建标签(labels),将子类别名称和产品数量组合在一起。使用 squarify.plot 绘制圆形打包图,传入 sizes 和 labels。设置透明度(alpha=0.7)并关闭坐标轴(ax.axis('off'))以提高可视化效果。设置图表标题并使用 plt.show() 显示图表。小知识
圆形打包图:是树形图的一种变体,以圆形布局显示层次数据。它们以更美观且节省空间的方式显示类别内的比例关系。squarify:通常用于树形图,但也可以通过一些自定义调整用于圆形打包图,展示了 Python 可视化工具的灵活性。
系列完整内容可以在公众号主页搜索或点击分栏找到,欢迎扫码关注预防迷路找不到。感谢您的支持与相伴。
