局部与整体类可视化图像

局部与整体类可视化图像

局部与整体类可视图表全解析

1. 韦恩图(Venn Diagram)

特点与原理

视觉表现:通过圆形重叠区域展示集合的交集和并集,重叠面积与元素数量正相关。
数学基础:基于集合论,支持2-5个集合(超过5个需用欧拉图变体)。
局限性:集合过多时视觉混乱,无法展示精确数值(需依赖标签)。

应用场景
生物学:基因家族共同表达分析。
商业分析:用户行为重叠(如同时使用产品A和B的客户比例)。
案例:比较Twitter和Instagram用户的共同活跃人群。

from matplotlib_venn import venn3
import matplotlib.pyplot as plt

# 定义三个集合的大小及交集
venn3(subsets=(20, 10, 8, 5, 3, 2, 1), 
      set_labels=('Twitter', 'Instagram', 'TikTok'))
plt.title("Social Media User Overlap")
plt.show()

 

实验结果:

 


输出说明:三圆重叠,标签显示各区域基数,中心三重交集区域占比最小。

 

2. 饼图(Pie Chart)与环形图(Doughnut Chart)

对比分析

特性饼图环形图
中心区域 无留白 留白(可放置标题/指标)
多系列对比 需并列多个饼图 可嵌套多层环
可读性 小块面积难比较 更清晰(尤其大数据)

 

应用场景

  • 饼图:单一维度占比(如2023年公司各部门预算分配)。

  • 环形图:时间序列对比(如2022 vs 2023年支出结构变化)。

Python实现

# 饼图
labels = ['R&D', 'Marketing', 'HR']
sizes = [40, 35, 25]
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
plt.title("Budget Allocation (Pie Chart)")
plt.show()

# 环形图
plt.pie(sizes, labels=labels, wedgeprops={'width':0.4}, autopct='%1.1f%%')
plt.title("Budget Allocation (Doughnut Chart)")
plt.show()

 

实验结果:

 

 


左为饼图,右为环形图。环形图中心空白区域可添加总预算数值。


3. 旭日图(Sunburst Chart)

层级数据可视化

  • 原理:从中心向外辐射,每层代表一个数据层级,角度宽度=子类占比。

  • 优势:直观展示父子关系(如国家→省→城市销售额)。

  • 交互功能:支持点击展开/折叠层级(Plotly实现)。

应用场景

  • 电商:商品类目下各子类销售占比。

  • 文件系统:磁盘空间占用分析。

Python实现(Plotly)

import plotly.express as px
data = dict(
    parent=["Total", "Total", "Electronics", "Clothing"],
    names=["Electronics", "Clothing", "Phones", "Shirts"],
    value=[60, 40, 35, 25]
)
fig = px.sunburst(data, names='names', parents='parent', values='value')
fig.update_layout(title="Sales Distribution by Category")
fig.show()

 

实验结果

 


交互式图表,悬停显示数值,点击可聚焦查看子类。


4. 圆堆积图(Circular Packing)

实验设计

  • 数据准备:模拟生态系统数据(哺乳动物→食肉动物→具体物种)。

  • 工具选择circlify库计算圆形布局,matplotlib绘制。

Python实现

import circlify
data = [{"id": "Mammals", "value": 100}, 
        {"id": "Carnivores", "parent": "Mammals", "value": 60},
        {"id": "Herbivores", "parent": "Mammals", "value": 40}]
circles = circlify.circlify(data, show_enclosure=True)

fig, ax = plt.subplots(figsize=(8,8))
for circle in circles:
    if circle.level != 1:  # 跳过最外层容器
        ax.add_patch(plt.Circle((circle.x, circle.y), circle.r, 
                     fill=True, alpha=0.7, linewidth=2))
        plt.text(circle.x, circle.y, circle.ex["id"], ha='center')
plt.axis('off')
plt.title("Ecosystem Hierarchy (Circular Packing)")
plt.show()

 

实验结果

 




实验总结与建议

1. 工具选择对比

工具库适用图表交互性学习曲线
Matplotlib 饼图/环形图/韦恩图
Plotly 旭日图/高级饼图
Circlify 圆堆积图

2. 关键发现

  • 饼图陷阱:当分类超过6个时,建议改用条形图或环形图。

  • 旭日图优势:比传统树图更节省空间,适合深层次数据。

  • 圆堆积图局限:面积比较不精确,需配合标签使用。

3. 性能优化

  • 大数据处理:Plotly的旭日图在超过1万节点时需启用maxdepth限制层级。

  • 颜色策略:使用渐变色系(如viridis)提升环形图的多系列区分度。


扩展方向

  • 动态可视化:用Plotly Dash实现实时更新的旭日图(如股票行业占比变化)。

  • 3D变体:尝试pyecharts的3D饼图增强视觉冲击力(适用于演示场景)。

通过本实验,我们验证了不同局部-整体图表的适用边界及工具链的最佳实践。实际应用中需结合数据复杂度、展示场景和受众需求灵活选择。

 

posted @ 2025-04-07 23:49  小菲困困  阅读(154)  评论(0)    收藏  举报