局部与整体类可视化图像总结

1.韦恩图

韦恩图是一种表示集合关系的图形工具,用于显示不同集合之间的交集、并集和差集。局部与整体类可视化图像的韦恩图具体描述了如何将集合划分成整体与其中的部分(局部)关系。

特点

(1)整体与局部关系:韦恩图用于表示多个集合之间的关系,如交集、并集、差集等。它可以直观地展示局部与整体的交互与重叠,帮助我们理解某个元素属于多个集合中的一个或多个。
(2)交集:多个集合的交集部分表示这些集合之间共同的元素。
(2)并集:集合的并集部分表示所有集合的元素,不考虑重复。
(3)差集:一个集合的差集部分表示该集合与其他集合之间独有的元素。

应用场景

(1)数据分析与统计:用于数据集之间的关系分析。例如,比较两个或多个不同数据集中的元素,找出它们的交集、并集或差集。
(2)生物学与基因研究:表示不同物种或基因之间的相似性和差异。
(3)市场分析:分析消费者群体的重叠,了解不同用户群体之间的关系。

python实现

用python实现三个集合的韦恩图绘制,代码如下:

import matplotlib.pyplot as plt
from matplotlib_venn import venn2, venn3

#3个集合的韦恩图
# 集合A、B、C的元素
set_A = {1, 2, 3, 4}
set_B = {3, 4, 5, 6}
set_C = {4, 6, 7, 8}

# 绘制3个集合的韦恩图
venn3([set_A, set_B, set_C], set_labels=('Set A', 'Set B', 'Set C'))
plt.title("Venn Diagram - 3 Sets")
plt.show()

结果如图所示:
在这里插入图片描述

变体

除了传统的韦恩图,还有一些更高级的韦恩图类型和方法可以解决传统韦恩图的一些局限性,尤其是在处理多集合、大规模数据集以及集合关系复杂时。以下是交互式韦恩图形式。

交互式韦恩图

传统的韦恩图主要是静态图形,显示的是集合的交集、并集等,但当涉及到多个集合或更复杂的集合关系时,静态的图可能显得非常拥挤和不清晰。为了应对这个问题,可以使用交互式韦恩图,适合处理多个集合时的数据展示。
实现代码如下:

import plotly.graph_objects as go
from ipywidgets import interact, IntSlider


def plotly_interactive_venn3(a=10, b=10, c=10, ab=5, ac=5, bc=5, abc=2):
    fig = go.Figure()

    # 添加三个圆形
    fig.add_shape(type="circle",
                  xref="x", yref="y",
                  x0=0, y0=0, x1=2, y1=2,
                  line_color="blue",
                  fillcolor="blue",
                  opacity=0.3)

    fig.add_shape(type="circle",
                  xref="x", yref="y",
                  x0=1, y0=0, x1=3, y1=2,
                  line_color="red",
                  fillcolor="red",
                  opacity=0.3)

    fig.add_shape(type="circle",
                  xref="x", yref="y",
                  x0=0.5, y0=1, x1=2.5, y1=3,
                  line_color="green",
                  fillcolor="green",
                  opacity=0.3)

    # 添加文本标签
    fig.add_annotation(x=0.5, y=0.5,
                       text=f"A only\n{a - ab - ac + abc}",
                       showarrow=False)

    fig.add_annotation(x=2.5, y=0.5,
                       text=f"B only\n{b - ab - bc + abc}",
                       showarrow=False)

    fig.add_annotation(x=1.5, y=2.5,
                       text=f"C only\n{c - ac - bc + abc}",
                       showarrow=False)

    fig.add_annotation(x=1.0, y=0.5,
                       text=f"A ∩ B\n{ab - abc}",
                       showarrow=False)

    fig.add_annotation(x=0.75, y=1.5,
                       text=f"A ∩ C\n{ac - abc}",
                       showarrow=False)

    fig.add_annotation(x=2.0, y=1.5,
                       text=f"B ∩ C\n{bc - abc}",
                       showarrow=False)

    fig.add_annotation(x=1.5, y=1.0,
                       text=f"A ∩ B ∩ C\n{abc}",
                       showarrow=False)

    # 设置图表范围
    fig.update_xaxes(range=[-0.5, 3.5])
    fig.update_yaxes(range=[-0.5, 3.5])

    fig.update_layout(
        title="Interactive 3-Set Venn Diagram with Plotly",
        width=700,
        height=700,
        showlegend=False
    )

    fig.show()


interact(plotly_interactive_venn3,
         a=IntSlider(min=0, max=20, step=1, value=10),
         b=IntSlider(min=0, max=20, step=1, value=10),
         c=IntSlider(min=0, max=20, step=1, value=10),
         ab=IntSlider(min=0, max=20, step=1, value=5),
         ac=IntSlider(min=0, max=20, step=1, value=5),
         bc=IntSlider(min=0, max=20, step=1, value=5),
         abc=IntSlider(min=0, max=20, step=1, value=2))


结果如图所示:
在这里插入图片描述

2.饼图

饼图是一种常见的用于显示比例关系的图形。它通过一个圆形来表示数据集,圆形被分割成多个扇形区域,每个区域的大小代表该部分在整体中的比例。饼图用于展示各部分与整体之间的比例关系,通常以百分比形式呈现。

特点

(1)直观性强:饼图通过不同的扇形区域来直观地表现各部分的大小与整体的关系。
(2)适用于少量数据:饼图通常用于展示几个部分的数据,扇形区域的数量不宜过多,过多的部分会导致图形难以解读。
(3)显示比例关系:它能够清晰地展示各部分占整体的比例,适合展示组成部分占比或类别分布。
(4)颜色和标签:每个扇形可以用不同的颜色表示,通常还会标注百分比或具体数值,增强可读性。

应用场景

(1)市场份额分析:展示不同公司、产品或服务的市场占有率。
(2)预算分配:展示各类支出在总预算中的比例,如家庭开销、公司预算等。
(3)调查结果:表示调查中不同选项的选择分布,适用于简单的投票、问卷调查分析。
(4)人口统计数据:显示不同群体的比例,如年龄段、性别比例等。
(5)资源分配:展示各类资源或时间分配的比例。

python实现

实现代码如下:


import matplotlib.pyplot as plt

# 示例数据:展示各项开销比例
labels = ['Rent', 'Food', 'Entertainment', 'Utilities', 'Savings']
sizes = [40, 20, 10, 15, 15]  # 各部分所占的比例
colors = ['#ff9999','#66b3ff','#99ff99','#ffcc99','#c2c2f0']  # 每个部分的颜色
explode = (0.1, 0, 0, 0, 0)  # 将'Rent'部分稍微突出显示,便于区分

# 绘制饼图
plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=140)

# 添加标题
plt.title("Budget Distribution")

# 显示图形
plt.show()

结果如图所示:
在这里插入图片描述

变体

饼图虽然广泛用于可视化部分与整体之间的关系,但当数据复杂或类别过多时,传统饼图可能会变得难以理解。以下是一些更高级的饼图形式,它们能够解决传统饼图的一些问题,尤其是在数据量大或类别较多时:

a 堆积饼图

堆积饼图将饼图中的多个数据点进行堆叠,允许不同数据点显示在一个饼图中,每个部分都堆叠在一起,从而避免了多个饼图的使用。这种方法特别适合于展示时间序列数据或不同分类的累积趋势。实现代码如下:

import matplotlib.pyplot as plt

# 示例数据:不同时间段的预算分配
labels = ['Rent', 'Food', 'Entertainment', 'Utilities', 'Savings']
sizes1 = [40, 20, 10, 15, 15]  # 第一时期的比例
sizes2 = [30, 25, 15, 20, 10]  # 第二时期的比例

# 堆积饼图
fig, ax = plt.subplots()
ax.pie(sizes1, labels=labels, autopct='%1.1f%%', startangle=140, colors=['#ff9999','#66b3ff','#99ff99','#ffcc99','#c2c2f0'])
ax.pie(sizes2, labels=labels, autopct='%1.1f%%', startangle=140, colors=['#ff6666','#3399ff','#66cc66','#ff9966','#ccccff'], radius=0.75)

# 添加标题
plt.title("Stacked Pie Chart")

# 显示图形
plt.show()

结果如图所示:
在这里插入图片描述

b 玫瑰图

玫瑰图或极坐标柱状图是饼图的另一种变体,通过在极坐标系统中绘制多个扇形条来展示数据。每个扇形条的长度表示某一类别的大小,可以用于展示周期性或方向性的数据。实现代码如下:

import numpy as np
import matplotlib.pyplot as plt

# 示例数据
labels = ['A', 'B', 'C', 'D', 'E']
sizes = [10, 20, 30, 40, 50]

# 角度设置
angles = np.linspace(0, 2 * np.pi, len(labels), endpoint=False)

# 绘制玫瑰图
fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})
ax.bar(angles, sizes, width=0.3, bottom=0.0)

# 设置标签
ax.set_xticks(angles)
ax.set_xticklabels(labels)

# 添加标题
plt.title("Rose Chart Example")

# 显示图形
plt.show()

结果如图所示:
在这里插入图片描述

3.环形图

环形图是饼图的一种变体,通常用于表示各部分与整体之间的比例关系。它通过去除饼图的中心部分,形成一个带空心的圆形区域。由于去掉了中心区域,环形图在视觉上相对更清晰,也为数据标签或其他信息提供了更多空间。

特点

(1)视觉空间优化:环形图通过去除圆心部分,避免了传统饼图在多个数据类别时的拥挤问题,提供更多的空间来放置标签、标题等信息。
(2)可添加中心内容:中心区域可以用来显示总数、整体比例或其他额外信息,提升图表的可读性。
(3)改善对比度:相对于传统的饼图,环形图让数据的呈现更加清晰,尤其是当数据项较多时。
(4)易于展示比例关系:像饼图一样,环形图通过扇形的面积展示每个部分在整体中的比例。

应用场景

(1)预算分配:用于展示各项开销在总预算中的比例,比如家庭支出、公司各项费用等。
(2)市场份额:展示不同公司、品牌或产品在市场中的占比。
(3)资源分配:显示不同部门、项目或任务的资源占比,如项目管理中的时间分配。
(4)人口统计:展示不同群体(如年龄段、性别、地区)的比例。

python实现

实现代码如下:

import matplotlib.pyplot as plt

# 示例数据:展示各项开销比例
labels = ['Rent', 'Food', 'Entertainment', 'Utilities', 'Savings']
sizes = [40, 20, 10, 15, 15]  # 各部分所占的比例
colors = ['#ff9999','#66b3ff','#99ff99','#ffcc99','#c2c2f0']  # 每个部分的颜色

# 绘制环形图
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=140, wedgeprops={'width': 0.4})

# 添加标题
plt.title("Budget Distribution - Doughnut Chart")

# 显示图形
plt.show()

结果如图所示:
在这里插入图片描述

变体

环形图虽然它比传统的饼图在视觉上更清晰,但在数据复杂或者类别过多时,仍然可能会出现可读性差、标签重叠等问题。为了提高环形图的可视化效果并解决这些问题,可以考虑一些更高级的环形图变体或其他替代方案。以下是几种更高级的环形图及其解决问题的方式:

a 多层环形图

特点:
通过在同一个图表中叠加多个环形层,展示不同层次的数据。这种方式适合展示多维数据的比例关系。每一层的环形图代表一个数据集或类别,可以更直观地看到不同类别之间的层次结构。

解决问题:
适用于展示复杂数据,避免了将所有数据堆积在一个环中。通过多个层次的展示,可以让不同类别的数据更加易于对比和理解。
实现代码和结果如下:

import matplotlib.pyplot as plt
import numpy as np

# 数据示例
labels1 = ['A', 'B', 'C', 'D']
sizes1 = [40, 30, 20, 10]
labels2 = ['E', 'F', 'G', 'H']
sizes2 = [50, 20, 15, 15]

fig, ax = plt.subplots(figsize=(6,6))

# 第一层(外环)
ax.pie(sizes1, labels=labels1, autopct='%1.1f%%', startangle=90, wedgeprops={'width': 0.4})

# 第二层(内环)
ax.pie(sizes2, labels=labels2, autopct='%1.1f%%', startangle=90, radius=0.6, wedgeprops={'width': 0.4})

# 添加标题
plt.title("Multi-Layer Doughnut Chart")

# 显示图形
plt.show()

在这里插入图片描述

b 环形热力图

特点:
结合了热力图和环形图的优势,环形的每个部分根据数据的大小通过不同的颜色进行编码,形成热力图效果。这种图表特别适合于展示数据的分布情况及其强度。

解决问题:
环形热力图通过颜色的变化,使得即使数据很多,仍然可以通过颜色来判断哪些部分更为突出,避免了单一的数值展示无法准确表达数据的复杂性。
实现代码和结果如下:


import matplotlib.pyplot as plt
import numpy as np

# 数据示例
sizes = [40, 30, 20, 10]
colors = plt.cm.viridis(np.linspace(0, 1, len(sizes)))  # 使用热力图颜色映射

fig, ax = plt.subplots(figsize=(6,6))

ax.pie(sizes, colors=colors, autopct='%1.1f%%', startangle=90, wedgeprops={'width': 0.4})

# 添加标题
plt.title("Heatmap Doughnut Chart")

# 显示图形
plt.show()

在这里插入图片描述

4.旭日图

旭日图是一种层次化的树状图,用于展示数据的层次结构或分类关系。它将数据从中心开始呈现,外圈表示更深层次的分类,内圈表示更高层次的分类。每一层级的数据通过弧形扇区来表示,图形的面积反映了每个部分的比例,形成一种逐层扩展的效果。

特点

(1)层次结构展示:旭日图的最主要特点是能够清晰展示层次结构数据。它非常适合用于展示包含多个子层级的复杂分类数据。
(2)易于识别数据关系:通过环状布局,旭日图能够直观地表示不同层级之间的关系,帮助用户理解整体数据的构成。
(3)比例表达:每个扇区的面积大小代表数据的比例,可以很容易看出每个部分在整体中的占比。

应用场景

(1)目录结构展示:例如展示计算机文件夹结构、网站的目录树、产品目录等。
(2)数据分类分析:适合展示分类数据,例如市场份额、人口统计数据、销售数据等。
(3)财务数据展示:展示公司的财务数据结构,例如预算分配、收入来源等。
(4)层级结构分析:用于组织结构、分销网络、企业结构等复杂的层级关系的可视化。
(5)调查结果分析:展示调查中的不同选择项和各自的占比,尤其是当选择项之间有层级关系时。

python实现

实现代码如下:

import plotly.graph_objects as go

# 示例数据
labels = ['Root', 'A', 'B', 'C', 'A1', 'A2', 'B1', 'C1', 'C2']
parents = ['', 'Root', 'Root', 'Root', 'A', 'A', 'B', 'C', 'C']
values = [10, 20, 30, 40, 15, 5, 10, 20, 20]

# 创建旭日图
fig = go.Figure(go.Sunburst(
    labels=labels,
    parents=parents,
    values=values,
    hoverinfo="label+value+percent entry",  # 鼠标悬停显示信息
))

# 添加标题
fig.update_layout(title="Sunburst Chart Example")

# 显示图形
fig.show()

结果如图所示:
在这里插入图片描述

5.圆堆积图

圆堆积图是一种环形堆积图,它以圆形为基础,展示不同类别或数据在一个圆环中的占比。不同类别或数据的堆叠部分通过不同的颜色或高度来表示。它将传统堆积条形图中的堆叠方式转化为环形布局,使得数据不仅具有比例对比,还能通过空间排列突出显示各部分的相对重要性。

特点

(1)环形布局:圆堆积图的最大特点是采用环形展示,数据部分环绕在圆心周围形成堆叠效果。
(2)数据对比:通过堆叠环形的不同部分,可以清楚地看到各部分在整体中的占比,适合比较多个类别或时间段的数据变化。
(3)高效空间利用:相比于传统的堆积条形图,圆堆积图能够在较小的空间内展示更多的数据,特别是展示各个类别的占比时更具视觉效果。

应用场景

(1)市场份额分析:展示不同公司、产品或服务在市场中的份额,并比较它们的变化。
(2)财务数据展示:用于展示不同时间段或不同类别(如各个部门、收入来源等)的预算、收入和支出占比。
(3)产品组合分析:展示一个产品组合中各部分(如产品、服务、地域等)的占比,帮助管理者评估不同组成部分的贡献。
(4)人口统计分析:展示不同群体(如年龄段、性别、地域等)在整体中的占比,帮助进行社会分析。

python实现

实现代码如下:

import plotly.graph_objects as go

# 示例数据
categories = ['Category A', 'Category B', 'Category C', 'Category D']
values = [30, 40, 20, 10]

# 创建圆堆积图
fig = go.Figure(go.Pie(
    labels=categories,
    values=values,
    hole=0.3,  # 圆环的孔洞大小
    textinfo='percent+label',  # 显示百分比和标签
    pull=[0.1, 0, 0, 0]  # 拉动第一个部分
))

# 设置标题
fig.update_layout(title="Radial Stacked Chart (Donut Chart)")

# 显示图表
fig.show()

结果如图所示:
在这里插入图片描述

变体

a 分层圆堆积图

特点:
分层圆堆积图通过嵌套多个圆环来展示不同层次的数据。每一层代表数据的一个维度,环绕的每一层可以展示子类别的数据比例。此方法能够更清晰地展示不同维度间的关系,避免过于复杂的堆叠。
实现代码和结果如下:

import plotly.graph_objects as go

# 示例数据
labels = ['Root', 'Category A', 'Category B', 'Category C', 'A1', 'A2', 'B1', 'B2', 'C1', 'C2']
parents = ['', 'Root', 'Root', 'Root', 'Category A', 'Category A', 'Category B', 'Category B', 'Category C', 'Category C']
values = [100, 50, 30, 20, 25, 25, 15, 15, 10, 10]

# 创建分层圆堆积图
fig = go.Figure(go.Sunburst(
    labels=labels,
    parents=parents,
    values=values,
    hoverinfo="label+value+percent entry",  # 鼠标悬停显示信息
))

fig.update_layout(title="Hierarchical Radial Stacked Chart")
fig.show()

在这里插入图片描述

b 动态缩放和聚焦圆堆积图

特点:
动态缩放和聚焦圆堆积图提供了更强的可操作性,用户可以选择对某些类别进行放大查看,或者缩小查看整体趋势。这种技术可以帮助解决数据量大时,图表中的细节难以辨识的问题。

解决问题:
当数据量大时,传统圆堆积图会变得难以解读。动态缩放和聚焦功能允许用户逐步缩放、聚焦某一部分,减轻图表的密集度和信息过载问题。
实现代码和结果如下:

import plotly.graph_objects as go

labels = ['Category A', 'Category B', 'Category C', 'A1', 'A2', 'B1', 'B2', 'C1', 'C2']
values = [30, 50, 20, 15, 15, 25, 25, 10, 10]
parents = ['', '', '', 'Category A', 'Category A', 'Category B', 'Category B', 'Category C', 'Category C']

fig = go.Figure(go.Sunburst(
    labels=labels,
    values=values,
    parents=parents,
    hoverinfo="label+value+percent entry",
    textinfo="label+value",
))

fig.update_layout(
    title="Zoomable Radial Stacked Chart",
    dragmode='zoom'  # 启用缩放功能
)

fig.show()

在这里插入图片描述

6.桑基图

桑基图是一种用于表示数据流动和比例关系的可视化图表。它以节点和流线的形式展示从整体到局部的分布路径,流线的宽度表示数据流量大小,能够清晰直观地展示整体如何分解为多个部分,以及各部分之间的关系。

特点

(1)整体与局部关系:通过从一个或多个源节点向多个目标节点的连接,显示数据如何从整体逐层分配到局部,强调流动过程中的层级结构。
(2)流向展示:节点之间通过流线相连,表示数据从一个节点流向另一个节点,流线的粗细表示流量的大小。
(3)多层级结构:支持多个层级的数据拆解,每一层都可以被视为整体,其下级为局部,实现逐层细化展示。

应用场景

(1)资源流向分析:如能源流动图,展示从发电、输电到各类用途的资源分配过程。
(2)用户行为路径追踪:分析用户从首页访问、浏览产品、添加购物车到完成支付的各个阶段的流失与转化情况。
(3)预算与资金分配分析:展示企业或组织的预算从总体到各部门、各项目的分配结构。
实现代码如下:

import plotly.graph_objects as go

# 定义节点(名称)
labels = ["总预算", "市场", "研发", "广告", "公关", "技术", "UI设计"]

# 定义流线:source 是起点索引,target 是终点索引,value 是流量大小
sources = [0, 0, 1, 1, 2, 2]
targets = [1, 2, 3, 4, 5, 6]
values  = [50, 50, 20, 30, 30, 20]

# 构建图
fig = go.Figure(go.Sankey(
    node = dict(label = labels, pad=20, thickness=20, color="lightblue"),
    link = dict(source = sources, target = targets, value = values)
))

fig.update_layout(title="💸 桑基图示例:预算流向分析", font=dict(size=12))
fig.show()

结果如图所示:
在这里插入图片描述

图表类型对比分析​

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值