【100天精通Python】Day64:Python可视化_Matplotlib绘制误差线图、填充图、堆叠面积图,示例+代码

简介: 【100天精通Python】Day64:Python可视化_Matplotlib绘制误差线图、填充图、堆叠面积图,示例+代码

1 绘制误差线图(errorbar)

       误差线图用于可视化一个或多个数据集的测量值及其相关误差或不确定性。每个数据点可能有不同的误差范围,这些误差可以表示为上下误差条、对称误差、非对称误差等。通常,误差线图用于比较多个实验条件或数据源之间的差异。

(1) 上下误差条(Vertical Error Bars):

  • 上下误差条用于表示每个数据点在垂直方向上的误差范围,通常用于表示数据点的上下浮动范围,这可以是测量误差、标准差等。

(2)对称误差(Symmetric Error):

  • 对称误差表示数据点的误差范围在两个方向上是对称的,通常用于表示标准差或置信区间等。

(3)非对称误差(Asymmetric Error):

  • 非对称误差表示数据点的误差范围在两个方向上不对称,通常用于表示实验测量误差等。

示例:绘制误差线图

import matplotlib.pyplot as plt
import numpy as np
# 准备数据
x = np.array([1, 2, 3, 4, 5])
y1 = np.array([2, 3, 5, 4, 6])
y2 = np.array([3, 4, 6, 5, 7])
# 不对称误差范围
y1_lower_err = np.array([0.2, 0.3, 0.1, 0.4, 0.15])
y1_upper_err = np.array([0.1, 0.25, 0.15, 0.3, 0.1])
# 对称误差范围
y2_err = np.array([0.15, 0.2, 0.25, 0.2, 0.18])
# 绘制误差线图
plt.errorbar(x, y1, yerr=[y1_lower_err, y1_upper_err], fmt='o', label='Data 1 (Asymmetric Errors)', capsize=5)
plt.errorbar(x, y2, yerr=y2_err, fmt='s', label='Data 2 (Symmetric Errors)', capsize=5)
# 添加标签和标题
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Error Bar Plot')
# 添加图例
plt.legend()
# 显示图形
plt.grid(True)
plt.show()

运行:

        这段代码用于绘制误差线图,包括不对称误差范围和对称误差范围。其中,x轴表示自变量,y轴表示因变量。

       首先,通过导入matplotlib.pyplot和numpy库准备绘图所需的数据。数据包括x的取值和两个因变量y1和y2的取值。 接下来,通过numpy库创建了不对称误差范围的上限和下限数组(y1_lower_err和y1_upper_err),以及对称误差范围的数组(y2_err)。

       然后,使用plt.errorbar函数分别绘制了两组数据的误差线,其中yerr参数分别传入了不对称和对称误差范围的数组,fmt参数指定了误差线的样式。

       同时,添加了标签和标题用以说明图形的含义,并添加了图例以表示参与比较的数据。 最后,调用plt.grid(True)显示网格线,调用plt.show()显示图形。


2 绘制填充图(fill_between)

       绘制填充图(Fill Between Plot)用于可视化两个数据集之间的区域或曲线下的区域。这通常用于表示数据的不确定性、区间、或者两个数据集之间的差异。

      绘制填充图的关键思想是创建一个包围两个数据集之间区域的闭合形状,并对其进行填充。通常,这两个数据集可以是两条曲线、一条曲线和坐标轴之间的区域、或者两个曲线之间的区域。填充图在数据可视化中常用于突出数据集的差异或不确定性范围。

示例代码

以下是一个示例代码,演示如何使用 Matplotlib 绘制填充图来表示两个数据集之间的区域:

import matplotlib.pyplot as plt
import numpy as np
# 准备数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 创建填充图
plt.fill_between(x, y1, y2, color='blue', alpha=0.5, label='Region Between y1 and y2')
# 添加标签和标题
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Fill Between Plot')
# 添加图例
plt.legend()
# 显示图形
plt.grid(True)
plt.show()

运行:

        在这个示例中,我们创建了两个数据集 y1 和 y2,并使用 plt.fill_between() 函数绘制了它们之间的填充区域。

                            参数 x 表示 x 坐标的数据,

       y1 和 y2 分别表示两个数据集的 y 坐标,

       color 指定填充区域的颜色,

       alpha 控制填充区域的透明度,

       label 用于图例的标签。

最后,我们添加了标签、标题、图例,并显示了填充图。

这个示例演示了如何绘制填充图,以突出两个数据集之间的区域,并使数据的不确定性或差异更清晰可见。你可以根据需要自定义填充图的样式、颜色和属性。

2.2 绘制填充线图(Filled Line Plot)

  • 填充线图是通过将线图的下方区域着色来创建的。它用于强调数据的趋势和变化,通常表示数据点与基线之间的关系。
  • 示例代码
import matplotlib.pyplot as plt
import numpy as np
# 准备数据
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
# 创建填充线图
plt.fill_between(x, y, alpha=0.3)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Filled Line Plot')
plt.show()

在上述示例中,我们使用 plt.fill_between() 函数创建了填充线图,通过填充线下方的区域来突出数据的波动。

2.3 堆叠面积图(Stacked Area Plot)

  • 堆叠面积图用于表示多个数据系列的累积贡献,通常表示不同类别的数据在总体中的比例。
  • 示例代码
import matplotlib.pyplot as plt
import numpy as np
# 准备数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 创建堆叠面积图
plt.stackplot(x, y1, y2, labels=['Sin', 'Cos'], alpha=0.5)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Stacked Area Plot')
plt.legend(loc='upper right')
plt.show()

运行:

       在上述示例中,我们使用 plt.stackplot() 函数创建了堆叠面积图,将两个数据系列 y1y2 堆叠在一起,通过填充区域来表示它们的贡献。

2.4 绘制填充直方图(Filled Histogram)

  • 填充直方图是在直方图的每个条形之间填充颜色,以强调不同数据区间的分布。
  • 示例:绘制男性和女性身高分布的比较的填充直方图
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据,模拟身高分布
np.random.seed(0)
male_heights = np.random.normal(175, 10, 500)
female_heights = np.random.normal(162, 8, 500)
# 创建填充直方图,同时显示男性和女性身高分布
plt.hist(male_heights, bins=30, density=True, alpha=0.5, color='blue', label='Male Heights')
plt.hist(female_heights, bins=30, density=True, alpha=0.5, color='pink', label='Female Heights')
# 添加标签和标题
plt.xlabel('Height (cm)')
plt.ylabel('Frequency')
plt.title('Height Distribution (Male vs. Female)')
plt.legend()
# 显示图形
plt.show()

       这段代码用于生成随机数据,模拟男性和女性的身高分布,并通过填充直方图将两者的身高分布可视化。

       首先,通过导入matplotlib.pyplot和numpy库准备绘图所需的数据。使用numpy库中的random模块生成了500个符合正态分布的男性身高数据和女性身高数据。

       接下来,使用plt.hist函数分别绘制了男性和女性身高的填充直方图。其中,bins参数指定了直方图的箱子数量,density参数设置为True可将频率转换为概率密度,alpha参数设置了填充颜色的透明度,

       color参数分别设置了男性身高直方图的颜色为蓝色,女性身高直方图的颜色为粉色,label参数指定了相应的标签。

       然后,添加了标签和标题用以说明图形的含义,并添加了图例以表示男性和女性身高的区分。

       最后,调用plt.show()显示图形。  


目录
相关文章
|
2天前
|
存储 程序员 Python
小白也能用的代码!1行Python,把PPT转成1张长图
大家好,我是程序员晚枫。今天介绍`python-office`库的新功能:仅用1行Python代码将PPT转为单张长图。
36 11
 小白也能用的代码!1行Python,把PPT转成1张长图
|
6天前
|
Python
费德勒权变模型(Fiedler Contingency Model)详解与Python代码示例
费德勒权变模型(Fiedler Contingency Model)详解与Python代码示例
|
6天前
|
Python
指数平滑法详解与Python代码示例
指数平滑法详解与Python代码示例
|
7天前
|
存储 Python
深度剖析:Python里字典树Trie的构建与查询,让你的代码更优雅!
【7月更文挑战第20天】Trie树(前缀树)是高效处理字符串搜索的 数据结构**。通过Python实现,每个节点含指向子节点的链接(字典)和结束标识。`TrieNode`和`Trie`类分别表示节点和树,支持插入、搜索和前缀检查。空间效率高,共享公共前缀,时间复杂度O(m)。适用于字符串集合的快速检索和灵活扩展,如自动补全。学习和应用Trie能提升代码效率和质量。
7 0
|
18天前
|
数据采集 大数据 数据安全/隐私保护
Python编程:如何有效等待套接字的读取与关闭
Python网络编程中,套接字事件处理至关重要。利用`selectors`模块和代理IP能增强程序的稳定性和可靠性。代码示例展示了如何通过代理连接目标服务器,注册套接字的读写事件并高效处理。在代理IP配置、连接创建、事件循环及回调函数中,实现了数据收发与连接管理,有效应对网络爬虫或聊天应用的需求,同时保护了真实IP。
Python编程:如何有效等待套接字的读取与关闭
|
2天前
|
网络协议 开发者 Python
深度探索Python Socket编程:从理论到实践,进阶篇带你领略网络编程的魅力!
【7月更文挑战第25天】在网络编程中, Python Socket编程因灵活性强而广受青睐。本文采用问答形式深入探讨其进阶技巧。**问题一**: Socket编程基于TCP/IP,通过创建Socket对象实现通信,支持客户端和服务器间的数据交换。**问题二**: 提升并发处理能力的方法包括多线程(适用于I/O密集型任务)、多进程(绕过GIL限制)和异步IO(asyncio)。**问题三**: 提供了一个使用asyncio库实现的异步Socket服务器示例,展示如何接收及响应客户端消息。通过这些内容,希望能激发读者对网络编程的兴趣并引导进一步探索。
11 4
|
1天前
|
网络协议 Python
网络世界的建筑师:Python Socket编程基础与进阶,构建你的网络帝国!
【7月更文挑战第26天】在网络的数字宇宙中,Python Socket编程是开启网络世界大门的钥匙。本指南将引领你从基础到实战,成为网络世界的建筑师。
6 2
|
2天前
|
开发者 Python
Python Socket编程:不只是基础,更有进阶秘籍,让你的网络应用飞起来!
【7月更文挑战第25天】在网络应用蓬勃发展的数字时代,Python凭借其简洁的语法和强大的库支持成为开发高效应用的首选。本文通过实时聊天室案例,介绍了Python Socket编程的基础与进阶技巧,包括服务器与客户端的建立、数据交换等基础篇内容,以及使用多线程和异步IO提升性能的进阶篇。基础示例展示了服务器端监听连接请求、接收转发消息,客户端连接服务器并收发消息的过程。进阶部分讨论了如何利用Python的`threading`模块和`asyncio`库来处理多客户端连接,提高应用的并发处理能力和响应速度。掌握这些技能,能使开发者在网络编程领域更加游刃有余,构建出高性能的应用程序。
10 3
|
1天前
|
消息中间件 网络协议 网络安全
Python Socket编程:打造你的专属网络通道,基础篇与进阶篇一网打尽!
【7月更文挑战第26天】在网络编程领域,Python以简洁语法和强大库支持成为构建应用的首选。Socket编程为核心,实现计算机间的数据交换。
8 1