局部与整体类可视化图像总结与Python实现
引言
在数据可视化中,局部与整体关系分析是核心场景之一。本文总结5种经典图表:韦恩图、饼图、环形图、旭日图、圆堆积图,并提供Python完整实现代码。
1. 韦恩图 (Venn Diagram)
特点
- 展示集合间交集与并集关系
- 最多支持3个集合可视化
应用场景
- 基因序列重叠分析
- 用户画像重叠分析
Python实现
# 安装库:pip install matplotlib-venn
from matplotlib_venn import venn2, venn3
import matplotlib.pyplot as plt
plt.figure(figsize=(8, 5))
# 两个集合
venn2(subsets=(30, 10, 5),
set_labels=('Set A', 'Set B'),
set_colors=('skyblue', 'orange'))
plt.title("2-Set Venn Diagram")
plt.savefig('venn2.png', dpi=300)
plt.show()
# 三个集合
venn3(subsets=(20, 15, 10, 5, 8, 3, 2),
set_labels=('Set A', 'Set B', 'Set C'),
alpha=0.6)
plt.title("3-Set Venn Diagram")
plt.savefig('venn3.png', dpi=300)
plt.show()
图像如下所示:
2. 饼图 (Pie Chart)
特点
- 展示单一维度占比
- 适合类别较少(≤6类)场景
应用场景
- 市场份额分布
- 预算分配比例
Python实现
import matplotlib.pyplot as plt
labels = ['Electronics', 'Clothing', 'Books', 'Home']
sizes = [45, 30, 15, 10]
colors = ['#ff9999','#66b3ff','#99ff99','#ffcc99']
plt.figure(figsize=(8, 6))
plt.pie(sizes, labels=labels, colors=colors,
autopct='%1.1f%%', startangle=90,
explode=(0.1, 0, 0, 0))
plt.axis('equal')
plt.title("Sales Distribution")
plt.savefig('pie_chart.png', dpi=300, bbox_inches='tight')
plt.show()
3. 环形图 (Doughnut Chart)
特点
- 饼图变种,中心留白
- 适合多组数据对比
应用场景
- 多组数据占比对比
- 仪表板空间优化
Python实现
import matplotlib.pyplot as plt
categories = ['A', 'B', 'C', 'D']
values = [35, 25, 20, 20]
colors = ['#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4']
plt.figure(figsize=(8, 6))
wedges, texts = plt.pie(values, colors=colors,
wedgeprops=dict(width=0.3))
# 添加中心圆
center_circle = plt.Circle((0,0),0.70,fc='white')
plt.gca().add_artist(center_circle)
plt.legend(wedges, categories,
title="Categories",
loc="center left",
bbox_to_anchor=(1, 0, 0.5, 1))
plt.title("Doughnut Chart Example")
plt.savefig('doughnut.png', dpi=300, bbox_inches='tight')
plt.show()
4. 旭日图 (Sunburst Chart)
特点
- 展示层次结构数据
- 支持多级分类分析
应用场景
- 文件目录结构分析
- 组织架构可视化
Python实现
import plotly.express as px
data = dict(
parent=["", "Root", "Root", "A", "A", "B"],
node=["Root", "A", "B", "A1", "A2", "B1"],
value=[0, 30, 70, 20, 10, 70])
fig = px.sunburst(
data,
names='node',
parents='parent',
values='value',
color='node',
color_discrete_sequence=px.colors.qualitative.Pastel
)
fig.update_layout(margin=dict(t=30, l=0, r=0, b=0))
fig.write_image("sunburst.png", scale=2)
fig.show()
图像如下所示:
鼠标光标移到图像上会显示详细信息
5. 圆堆积图 (Circle Packing)
特点
- 展示层次结构嵌套关系
- 面积编码数值大小
应用场景
- 产品分类层次可视化
- 生态系统物种分类
Python实现
import circlify
import matplotlib.pyplot as plt
data = [{'id':'Root', 'datum':100},
{'id':'A', 'datum':60},
{'id':'B', 'datum':40},
{'id':'A1', 'datum':35},
{'id':'A2', 'datum':25}]
circles = circlify.circlify(
[d['datum'] for d in data],
show_enclosure=False,
target_enclosure=circlify.Circle(x=0, y=0, r=1)
)
plt.figure(figsize=(10, 10))
ax = plt.gca()
for circle, d in zip(circles, data):
x, y, r = circle
ax.add_patch(plt.Circle((x, y), r, alpha=0.5, linewidth=2))
plt.annotate(d['id'], (x, y),
va='center', ha='center')
plt.axis('off')
plt.title("Circle Packing")
plt.savefig('circle_packing.png', dpi=300)
plt.show()
图像如下所示:
图表对比总结
图表类型 | 维度支持 | 主要优势 | 适用场景 |
---|---|---|---|
韦恩图 | 2-3集合 | 直观展示集合关系 | 小集合对比 |
饼图 | 单维度 | 快速理解占比 | 简单比例分析 |
环形图 | 多组对比 | 节省空间 | 仪表板展示 |
旭日图 | 层次数据 | 多级结构展示 | 文件/组织架构 |
圆堆积图 | 层次数值 | 面积编码数值 | 分类数据分布 |
实现工具总结
- Matplotlib:基础可视化库,支持饼图、环形图
- matplotlib_venn:专业韦恩图实现
- Plotly:交互式旭日图最佳选择
- Circlify:圆形布局算法核心支持
针对不同的数据类型选择恰到好处的图表表示,是数据可视化思想在局部与整体类可视化图像的应用体现,不同的图表类型具有不同的表示能力与图像特点,只有选择合适的图表类型进行数据表示,才能获得更好的数据呈现效果