【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中的装饰器:简化代码,增强功能
在Python的世界里,装饰器是那些静悄悄的幕后英雄。它们不张扬,却能默默地为函数或类增添强大的功能。本文将带你了解装饰器的魅力所在,从基础概念到实际应用,我们一步步揭开装饰器的神秘面纱。准备好了吗?让我们开始这段简洁而富有启发性的旅程吧!
56 6
|
21天前
|
存储 缓存 Java
Python高性能编程:五种核心优化技术的原理与Python代码
Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
58 5
Python高性能编程:五种核心优化技术的原理与Python代码
|
2月前
|
Python
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
78 33
|
2月前
|
JavaScript API C#
【Azure Developer】Python代码调用Graph API将外部用户添加到组,结果无效,也无错误信息
根据Graph API文档,在单个请求中将多个成员添加到组时,Python代码示例中的`members@odata.bind`被错误写为`members@odata_bind`,导致用户未成功添加。
50 10
|
2月前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
103 8
|
2月前
|
数据可视化 编译器 Python
Manim:数学可视化的强大工具 | python小知识
Manim(Manim Community Edition)是由3Blue1Brown的Grant Sanderson开发的数学动画引擎,专为数学和科学可视化设计。它结合了Python的灵活性与LaTeX的精确性,支持多领域的内容展示,能生成清晰、精确的数学动画,广泛应用于教育视频制作。安装简单,入门容易,适合教育工作者和编程爱好者使用。
558 7
|
2月前
|
API Python
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
68 11
|
2月前
|
测试技术 Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界中,装饰器是那些能够为我们的代码增添魔力的小精灵。它们不仅让代码看起来更加优雅,还能在不改变原有函数定义的情况下,增加额外的功能。本文将通过生动的例子和易于理解的语言,带你领略装饰器的奥秘,从基础概念到实际应用,一起开启Python装饰器的奇妙旅程。
55 11
|
2月前
|
Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器就像是给函数穿上了一件神奇的外套,让它们拥有了超能力。本文将通过浅显易懂的语言和生动的比喻,带你了解装饰器的基本概念、使用方法以及它们如何让你的代码变得更加简洁高效。让我们一起揭开装饰器的神秘面纱,看看它是如何在不改变函数核心逻辑的情况下,为函数增添新功能的吧!
|
2月前
|
程序员 测试技术 数据安全/隐私保护
深入理解Python装饰器:提升代码重用与可读性
本文旨在为中高级Python开发者提供一份关于装饰器的深度解析。通过探讨装饰器的基本原理、类型以及在实际项目中的应用案例,帮助读者更好地理解并运用这一强大的语言特性。不同于常规摘要,本文将以一个实际的软件开发场景引入,逐步揭示装饰器如何优化代码结构,提高开发效率和代码质量。
73 6