一、韦恩图
韦恩图(Venn diagram),也叫文氏图、维恩图,是一种用封闭曲线(通常是圆形或椭圆形)来表示集合及其关系的图形工具
1、特点:
通过重叠的圆形展示多个集合之间的关系。
每个圆代表一个集合,重叠部分表示交集,非重叠部分突出独有元素。
设计简单直观,具有很强的对比性,易于理解。
能够快速传递集合间的共有部分和差异部分的关键信息。
2、应用场景:
在市场细分中展示不同客户群体的重叠特征。
在教育领域中比较不同课程内容的交叉部分。
在生物学中分析基因组数据的共有与独有区域。
在演示文稿或报告中帮助观众快速抓住集合间的关系。
3、实现过程:
from matplotlib import pyplot as plt
from matplotlib_venn import venn2, venn3
# 绘制两个集合的韦恩图
plt.figure(figsize=(8, 8))
# 集合A和B的交集为1,A独有的部分为2,B独有的部分为3
venn2(subsets=(2, 3, 1), set_labels=('Set A', 'Set B'))
plt.title('Two - Set Venn Diagram')
plt.show()
# 绘制三个集合的韦恩图
plt.figure(figsize=(8, 8))
# 各部分数据依次表示A独有的部分、B独有的部分、A和B的交集、C独有的部分、A和C的交集、B和C的交集、A、B、C的交集
venn3(subsets=(1, 1, 1, 1, 1, 1, 1), set_labels=('Set A', 'Set B', 'Set C'))
plt.title('Three - Set Venn Diagram')
plt.show()
运行结果:
二、饼图
1、饼图的特点
直观展示比例关系:饼图将一个整体分割成不同的扇形部分,每个扇形的大小代表该部分在整体中所占的比例,通过扇形的角度和面积大小,能让人一眼看清各部分的占比情况。
简洁明了:图形结构简单,不需要过多的解读就能理解数据的分布情况,适合用于展示数据类别较少(一般不超过 7 个)的比例关系,否则会使图表过于复杂,难以分辨。
强调整体与部分关系:突出显示各个部分在整体中所占的份额,有助于强调整体的构成以及各部分对整体的贡献程度。
2、应用场景
市场份额分析:企业分析不同产品在市场上的占有率,比如手机厂商可以用饼图展示旗下不同型号手机的销量占总销量的比例,帮助企业了解市场表现,制定营销策略。
预算分配:在项目管理或财务管理中,展示预算在不同项目、部门或费用项目上的分配情况,如一个公司的年度预算在研发、生产、营销等方面的占比,以便合理规划资源。
人口统计:呈现不同年龄段、性别、职业等群体在总人口中的比例,例如统计一个城市中不同年龄段人口的分布情况,为城市规划和公共服务提供依据。
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data = [15, 30, 55]
labels = ['A', 'B', 'C']
colors = ['pink', 'blue', 'yellow']
plt.pie(data, labels=labels, colors=colors, autopct='%.1f%%')
plt.title('饼图')
plt.axis('equal')
plt.show()
运行结果:
三、环形图
环形图是一种特殊类型的图表,它在数据可视化中有着独特的应用。
1、环形图的特点
强调比例关系:与饼图类似,环形图也是通过扇形的大小来表示各部分在整体中所占的比例,能清晰地展示数据的分布情况。
中间可插入信息:环形图中间有一个空白区域,可以用于放置额外的信息,如数据的总标题、关键指标数值或其他相关注释,使图表更加紧凑和信息丰富。
视觉上更优雅:相比于饼图,环形图的环形形状使其在视觉上更加简洁、美观,给人一种精致的感觉,尤其适用于需要展示专业形象的场合。
可进行多层嵌套:可以通过多层环形图来展示多个维度的数据,内层环形图可以表示更细分的类别或不同的分组,有助于深入分析数据之间的关系。
2、应用场景:
展示不同地区的销售额分布(全国各省市的销售占比)。
分析产品类别的层级比例(电子产品中手机、电脑等的销量)。
表示多阶段项目的进展情况(研发、测试、生产各阶段的资源分配)。
用于仪表盘设计中,提升数据展示的美观性。
import matplotlib.pyplot as plt
# 数据
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]
# 绘制饼图
fig, ax = plt.subplots()
wedges, texts, autotexts = ax.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
# 将饼图转换为环形图
centre_circle = plt.Circle((0, 0), 0.70, fc='white')
fig.gca().add_artist(centre_circle)
# 设置图形为圆形
ax.axis('equal')
# 添加标题
plt.title('Ring Chart Example')
# 显示图形
plt.show()
运行结果:
四、旭日图
旭日图是一种数据可视化图表,也被称为多层饼图或环形层次图
1、旭日图的特点
层次结构展示:它以嵌套的环形方式展示数据,最内层代表根节点,向外每一层代表一个不同的分类层级,清晰地呈现数据的层次关系和占比情况。
直观呈现比例:通过扇形的大小来表示各部分在总体中所占的比例,用户可以直观地比较同一层级中不同类别之间的相对大小,以及不同层级之间的占比关系。
数据丰富度高:能够展示大量的数据信息,同时呈现多个维度的分类数据,既可以展示整体的分布情况,又能深入展示各部分的细节。
视觉效果美观:具有较为美观的视觉效果,环形的结构使得图表看起来更加柔和、流畅,相较于传统的柱状图或饼图,更能吸引观众的注意力,适合用于演示和报告等场合。
2、应用场景:
可视化文件系统的目录结构(展示文件夹和文件的嵌套关系)。
表示组织架构的层级分布(从公司到部门再到团队)。
分析网站流量来源(从总体访问量到具体页面)。
展示家谱或分类数据的多级分解。
import plotly.graph_objects as go
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 定义层次数据
fig = go.Figure(go.Sunburst(
ids=[
"北美洲", "欧洲", "澳大利亚", "北美洲-足球", "足球",
"北美洲-橄榄球", "欧洲-足球", "橄榄球",
"欧洲-美式足球", "澳大利亚-足球", "协会足球",
"澳大利亚规则足球", "澳大利亚-美式足球", "澳大利亚-橄榄球",
"橄榄球联盟", "橄榄球联合会"
],
labels=[
"北美洲", "欧洲", "澳大利亚", "足球", "足球", "橄榄球", "足球", "橄榄球", "美式足球",
"足球", "协会足球", "澳大利亚规则足球", "美式足球", "橄榄球", "橄榄球联盟", "橄榄球联合会"
],
parents=[
"", "", "", "北美洲", "北美洲", "北美洲", "欧洲", "欧洲", "欧洲",
"澳大利亚", "澳大利亚-足球", "澳大利亚-足球", "澳大利亚-足球", "澳大利亚-足球",
"澳大利亚-橄榄球", "澳大利亚-橄榄球"
],
marker=dict(colors=["#FF6347", "#4682B4", "#32CD32", "#FFD700", "#FF4500", "#8A2BE2", "#7FFF00", "#D2691E", "#FF1493", "#00FFFF", "#8B0000", "#FF00FF", "#0000FF", "#008000", "#800080", "#FFC0CB"]),
))
# 设置布局参数
fig.update_layout(
margin=dict(t=0, l=0, r=0, b=0),
title="体育项目层次结构旭日图",
sunburstcolorway=["#FF6347", "#4682B4", "#32CD32", "#FFD700", "#FF4500", "#8A2BE2", "#7FFF00", "#D2691E", "#FF1493", "#00FFFF", "#8B0000", "#FF00FF", "#0000FF", "#008000", "#800080", "#FFC0CB"]
)
# 绘制图形
fig.show()
运行结果:
五、圆堆积图
1、特点:
通过圆形的大小和嵌套关系表示数据,圆的大小反映数值。
圆之间的包含关系展示层次结构,直观且灵活。
既能展示数据的比例,又能清晰呈现层次关系。
设计吸引人,强调视觉冲击力。
2、应用场景:
表示人口统计中的年龄和性别分布(从总体到具体群体)。
分析网站流量来源的层级(从域名到子页面)。
展示产品销售的类别细分(从大类到具体型号)。
可视化生态系统中物种的层次关系。
import circlify
import matplotlib.pyplot as plt
import numpy as np
# 定义数据
data = [
{'id': 'A', 'datum': 10},
{'id': 'B', 'datum': 20},
{'id': 'C', 'datum': 30},
{'id': 'D', 'datum': 40},
{'id': 'E', 'datum': 50}
]
# 提取数据值
values = [item['datum'] for item in data]
# 生成圆堆积图数据
circles = circlify.circlify(values, show_enclosure=True)
# 创建绘图
fig, ax = plt.subplots(figsize=(10, 10))
# 生成不同的颜色
colors = plt.cm.viridis(np.linspace(0, 1, len(data)))
# 排除包围圆,只处理代表实际数据的圆
circles = circles[1:]
# 绘制每个圆
for i, circle in enumerate(circles):
x, y, r = circle.x, circle.y, circle.r
ax.add_patch(plt.Circle((x, y), r, edgecolor='black', facecolor=colors[i]))
# 添加数据标签
ax.text(x, y, data[i]['id'] + '\n' + str(data[i]['datum']),
ha='center', va='center', fontsize=10)
# 设置坐标轴
ax.set_xlim(-1.5, 1.5)
ax.set_ylim(-1.5, 1.5)
ax.set_aspect('equal')
ax.axis('off') # 隐藏坐标轴
# 显示图形
plt.show()
运行结果:
六、矩形树图
矩形树图是一种用于展示层次数据结构的可视化图表。
1、矩形树图的特点
层次清晰:通过矩形的嵌套来展示数据的层次关系,父节点包含子节点,能够直观地呈现数据的整体结构和各个部分之间的包含关系。
空间利用率高:将所有数据以矩形的形式紧密排列,能够在有限的空间内展示大量的数据信息,有效地利用了绘图空间。
比例直观:矩形的面积大小通常与所代表的数据量成正比,用户可以通过观察矩形的大小来快速比较不同节点数据的相对大小,便于发现数据之间的差异和分布规律。
2、应用场景
文件系统可视化:用于展示计算机文件系统中的文件夹和文件结构,帮助用户直观地了解文件的组织方式和占用空间大小。
企业组织结构展示:可以清晰地展示企业的层级结构,包括各个部门及其下属团队的关系,以及不同部门的人员规模等信息。
市场份额分析:在市场调研中,可用于展示不同市场细分领域中各品牌或产品的市场占有率,以及它们在不同层次的分类中的分布情况。
from pyecharts.charts import TreeMap
from pyecharts import options as opts
# 示例数据
data = [
{
"name": "水果",
"children": [
{
"name": "苹果",
"value": 30,
"children": [
{
"name": "红富士",
"value": 15
},
{
"name": "国光",
"value": 10
},
{
"name": "蛇果",
"value": 5
}
]
},
{
"name": "香蕉",
"value": 20
},
{
"name": "橙子",
"value": 15,
"children": [
{
"name": "脐橙",
"value": 10
},
{
"name": "冰糖橙",
"value": 5
}
]
}
]
}
]
# 创建矩形树图对象
treemap = TreeMap()
# 添加数据
treemap.add(
series_name="水果分布",
data=data,
# 设置矩形树图的布局方式为'orthogonal',表示水平和垂直方向交替布局
layout="orthogonal",
# 设置标签显示在矩形内部
label_opts=opts.LabelOpts(position="inside")
)
# 设置全局配置项,包括标题
treemap.set_global_opts(title_opts=opts.TitleOpts(title="水果分类矩形树图"))
# 渲染生成HTML文件
treemap.render("treemap_example.html")
运行结果:
七、总结
图表类型 | 优点 | 缺点 |
---|---|---|
韦恩图 | 直观呈现集合之间的重叠和独立关系,便于分析不同群体或类别之间的共同点与差异,适合用于概念性分析和逻辑展示。 | 对于复杂的数据结构或多个集合的组合,图形容易变得混乱,难以清晰表达各部分的关系,且不适合展示具体数值。 |
饼图 | 以圆形分割展示各部分占整体的比例,视觉上直观易懂,适合用于展示占比关系,尤其是数据分类较少时(一般不超过5类)。 | 当分类过多时,各扇形区域过小,难以区分,且标签可能重叠,影响可读性;此外,不适合用于比较具体数值的大小。 |
环形图 | 在展示各部分占比的同时,中间的空白区域可用于添加额外信息(如标题、总和等),视觉层次感更强,适合用于多层数据的展示。 | 分类过多时,环形图的可读性也会降低,且对于精确数值的展示能力有限,主要侧重于比例关系。 |
旭日图 | 能够清晰地展示多层次的数据结构和占比关系,从内到外层层展开,适合用于展示复杂的层级数据和细分情况,信息量丰富。 | 当层级过多或分类过于复杂时,图形可能变得难以理解和解读,底层分类的细节展示不够清晰,需要交互操作辅助查看。 |
圆堆积图 | 通过嵌套圆形展示数据的层次结构和相对大小,空间利用灵活,可在有限空间内展示大量数据,适合用于呈现包含关系。 | 对于不熟悉该图表的读者,理解数据关系可能有一定难度,且精确比较各圆大小较为困难,尤其是圆数量较多时。 |
矩形树图 | 以矩形嵌套的方式展示数据的层次和占比,空间利用率高,能在小区域内展示大量数据,矩形面积直观反映数据大小,便于比较不同类别数据。 | 当数据层次复杂或分类过多时,矩形可能过小,导致标签难以显示和阅读,对矩形大小的精确判断相对困难,尤其是相邻矩形大小相近时。 |
希望这个版本符合你的要求!