python随机生成数据并用双y轴绘制两条带误差棒的折线图

news2024/11/26 5:59:32

python绘图系列文章目录

往期python绘图合集:
python绘制简单的折线图
python读取excel中数据并绘制多子图多组图在一张画布上
python绘制带误差棒的柱状图
python绘制多子图并单独显示
python读取excel数据并绘制多y轴图像
python绘制柱状图并美化|不同颜色填充柱子
Python绘制带误差棒的柱状图渐变色填充含数据标注(进阶)


文章目录

  • python绘图系列文章目录
  • 前言
  • 一、准备工作
    • 1.1 环境搭建
  • 二、 绘制带误差棒的线图
    • 1.引入库
    • 2.数据生成
  • 三、完整代码
  • 四、运行结果


前言

在数据可视化中,有时候需要对数据进行统计检验,比如计算均值、标准差、置信区间等。为了更直观地了解数据的分布情况,我们通常会使用带误差棒的线图来展示数据。

在 Python 中,matplotlib 是一个非常强大的绘图库,它支持多种不同类型的图表,并且可以通过简单的代码实现高质量的数据可视化。本文将介绍如何使用 matplotlib 绘制带误差棒的线图,并且会提供示例代码进行演示。


一、准备工作

1.1 环境搭建

在开始之前,需要确保已经安装了 matplotlib 库。如果您还没有安装,可以使用以下命令进行安装:

pip install matplotlib

当然,除了 matplotlib 库之外,我们还需要使用 numpy 库来生成随机数,以便演示示例代码。同样地,如果您还没有安装 numpy 库,可以使用以下命令进行安装:

pip install numpy

二、 绘制带误差棒的线图

首先,让我们来看一下绘制带误差棒的线图需要用到的 matplotlib 函数:ax.errorbar()。这个函数可以在已有的图表上添加误差棒,以展示数据的变化范围。
下面是 ax.errorbar() 的语法:

ax.errorbar(x, y, yerr=None, xerr=None, fmt='', ecolor=None, elinewidth=None, 
capsize=None, barsabove=False, lolims=False, uplims=False, xlolims=False, 
xuplims=False, errorevery=1, capthick=None, *, data=None, **kwargs)

其中,参数 x 和 y 分别表示数据的 x 坐标和 y 坐标;参数 yerr 和 xerr 分别表示 y 方向和 x 方向的误差棒大小;参数 fmt 可以设置误差棒的线型、颜色、标记符号等属性;参数 capsize 可以设置误差棒末端的横杠长度。

在这里,我们以绘制两条带误差棒的线图为例,来看一下具体的实现方法。

  1. 首先,我们需要导入 matplotlib 和 numpy 库,并创建两个子图 ax1 和 ax2。
  2. 然后,我们使用 numpy库生成两组随机数据。
  3. 最后,我们分别绘制两条折线,并使用 ax.errorbar() 函数添加误差棒。

1.引入库

import matplotlib.pyplot as plt
import numpy as np
import matplotlib

2.数据生成

上述代码中,我使用 Numpy 库生成了两组包含 10 个数据点的随机数据集。其中,y1 对应左 y 轴,y2 对应右 y 轴。

# 生成随机数据
x = np.arange(0, 10, 1)
y1 = np.random.normal(5, 2, len(x))
y2 = np.random.normal(10, 3, len(x))

err1 = np.random.normal(1, 0.5, len(x)) 这行代码是用于生成误差棒的数据,其中 np.random.normal() 是 NumPy 库中的方法,用于生成符合正态分布的随机数。

具体来说,这个方法接受三个参数,分别是均值 loc、标准差 scale、以及生成的随机数的个数 size。这个方法的返回值是一个数组,包含指定数量的随机数。

在这行代码中,我使用了均值为 1、标准差为 0.5 的正态分布生成了与数据集 y1 长度相同的 10 个随机数。然后,这些随机数被当作误差棒的“半径”(即误差值),以便在折线图上绘制误差棒。

ax1.errorbar(x, y1, yerr=err1, fmt='o', color='#6D8F18', markersize=8,capsize=5)
ax2.errorbar(x, y2, yerr=err2, fmt='*', color='#3F7F4C', markersize=8,capsize=5)

capsize设置误差棒宽度
接着,我使用 errorbar() 方法绘制误差棒,并使用 twinx() 方法创建第二个坐标轴,ax.grid() 方法的参数修改为 visible=False,这样就可以将网格线设置为不可见。
然后,我设置了坐标轴标签、标题以及使用了双 legend() 方法分别对应两条线。

最后,我设置了坐标轴的字体和字号,并使用 spines 属性和 tick_params() 方法将两个坐标轴的颜色设置得不一致。

三、完整代码

# -*- coding: utf-8 -*-
"""
Created on Mon May 15 22:59:50 2023

@author: ypzhao
"""

import matplotlib.pyplot as plt
import numpy as np
import matplotlib

# 设置字体和字号
matplotlib.rcParams['font.family'] = 'Times New Roman'
matplotlib.rcParams['font.size'] = 24

font = {'family':'Times New Roman','size':28}
# 创建画布和子图
fig, ax1 = plt.subplots(figsize=(10,6),dpi=300)
ax2 = ax1.twinx()

# 生成随机数据
x = np.arange(0, 10, 1)
y1 = np.random.normal(5, 2, len(x))
y2 = np.random.normal(10, 3, len(x))

# 绘制折线图
ax1.plot(x, y1, color='#6D8F18', label='Line 1')
ax2.plot(x, y2, color='#3F7F4C', label='Line 2')

# 添加误差棒
err1 = np.random.normal(1, 0.5, len(x))
err2 = np.random.normal(1.5, 0.8, len(x))

opacity = 0.8
error_config = {'ecolor': '0.3'}


ax1.errorbar(x, y1, yerr=err1, fmt='o', color='#6D8F18', markersize=8,capsize=5)
ax2.errorbar(x, y2, yerr=err2, fmt='*', color='#3F7F4C', markersize=8,capsize=5)

# 设置坐标轴标签和标题
ax1.set_xlabel('day')
ax1.set_ylabel('pH1', color='#6D8F18')
ax2.set_ylabel('pH2', color='#3F7F4C')
ax1.set_title('Two Lines with Errorbars',font)

# 设置legend的显示样式和字体
ax1.legend(loc=1, prop={'family': 'Times New Roman', 'size': 16})
ax2.legend(loc=2, prop={'family': 'Times New Roman', 'size': 16})

# 设置坐标轴字体和字号
for ax in [ax1, ax2]:
    ax.tick_params(axis='both', which='major', labelsize=20)
    for tick in ax.get_xticklabels() + ax.get_yticklabels():
        tick.set_fontname('Times New Roman')

# 设置网格线不可见
ax1.grid(visible=False)
ax2.grid(visible=False)

# 设置双坐标轴的颜色不一致
ax1.spines['left'].set_color('#6D8F18')
ax1.spines['right'].set_color('#3F7F4C')
ax1.tick_params(axis='y', colors='#6D8F18')
ax2.tick_params(axis='y', colors='#3F7F4C')

plt.show()

分别调用 ax1.plot() 和 ax2.plot() 函数绘制两条折线,并使用 ax1.errorbar() 和 ax2.errorbar() 函数添加误差棒。其中,我们设置了 fmt=‘o’ 表示误差棒末端采用圆形标记符号,color=‘#6D8F18’ 表示误差棒的颜色采用绿色,capsize=5 表示误差棒末端横杠长度为 5。

使用 matplotlib 绘制带误差棒的线图时,只需要使用 ax.errorbar() 函数添加误差棒即可。在具体实现时,可以根据需要设置误差棒的线型、颜色、标记符号、末端横杠长度等属性,以便更好地展示数据的变化范围。

四、运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/538910.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IC验证学习笔记(AHB-RAM)08addr、bsize都随机,主要做地址偏移操作

rkv_ahbram_haddr_word_unaligned_virt_seq: 对addr和bsize都随机化操作 ifndef RKV_AHBRAM_HADDR_WORD_UNALIGNED_VIRT_SEQ_SV define RKV_AHBRAM_HADDR_WORD_UNALIGNED_VIRT_SEQ_SVclass rkv_ahbram_haddr_word_unaligned_virt_seq extends rkv_ahbram_base_virtual_sequenc…

深入探讨桥梁建筑中地质工程与仪器仪表应用

近期,随着桥梁建筑行业的不断发展,地质工程与仪器仪表应用成为了热议的话题。在桥梁、建筑、水利工程等领域,渗压计、MCU自动化测量单元、应变计、测缝计、固定测斜仪等各种先进的仪器仪表技术正在广泛应用,为工程施工和监测提供了…

什么是pytest自动化测试框架?如何安装和使用呢?赶快收藏起来

一、pytest是什么? pytest是一款强大的Python测试工具,可以胜任各种类型或级别的软件测试工作。实际上,越来越多的项目在使用pytest。因为pytest会提供更丰富的功能,包括assert重写、第三方插件,以及其他测试工具无法比…

116.【SpringBoot和Vue结合-图书馆管理系统】

前后端分离 (一)、SpringBootVue概述1.基本概述2.实现技术 (二)、Vue3.x搭建 (SpringBootVue)1.搭建Vue基本环境(1).搭建Vue项目框架(2).介绍Vue项目内容 2.搭建SpringBoot基本环境(1).创建SpringBootTest项目(2).初始化项目(3).测试SpringBoot的控制层 3.通过路由跳转访问组件…

Python+selenium自动化元素定位防踩坑

在自动化UI测试过程中常常会在元素定位阶段就踩坑,碰到困扰已久的问题。 以下是个人整理元素定位报错原因和解决方法。 踩坑一:StaleElementReferenceException selenium.common.exceptions.StaleElementReferenceException: Message: stale element re…

JavaScrip 中的 this, bind, call apply 简述

JavaScrip 中的 this, bind, call & apply 简述 this 是一个比较特殊的东西,基本上可以理解成 this 的指向是就近调用的指向,因此 this 在 JS 中也是一个比较令人困惑的知识点。 之前绕过 this 的方法基本上采用 arrow function,因为 a…

35、Adaptive Forms(3)Data Model

文章目录 35、Adaptive Forms(3)Data Model配置JDBC安装mysql-connector-j.jar在数据库中创建数据创建Data Model 35、Adaptive Forms(3)Data Model 在使用Mysql数据之前还需要在AEM中创建DataModel映射数据库的数据结构。也需要…

07-架构2023版-centos+docker部署nacos

1、创建nacos的数据库配置 1.1、创建数据库 1.2、创建用户nacos并授权数据库 参考 06 mysql 创建账户部分内容 1.3、执行数据库脚本 导入官方nacos sql语句。如果是历史有历史数据, 从历史数据sql导入 2、创建 bridge 网络并指定 IP 区间 2.1、创建自定义网络…

选择排序:20年前在谭浩强《c语言程序设计上》学习过(43)

小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生。 和猫妹学Python,一起趣味学编程。 今日主题 什么是选择排序? 用Python写段代码,实现插入排序。 选择排序 选择排序是一种简单的排序算…

Contrastive Learning

https://towardsdatascience.com/understanding-contrastive-learning-d5b19fd96607 The Beginner’s Guide to Contrastive Learning Contrastive Representation Learning | LilLog

Visual Studio 怎样设置断点并调试

1-普通断点 设置普通断点的方法很简单,就是在代码行的左边栏灰色区域点击或者把光标放在某代码行,按下 F9。 2-调试 按F5开始调试,按F11是逐行调试,F10是逐过程调试,shiftF5是停止调试。 3-高级调试 见链接&#x…

学系统集成项目管理工程师(中项)系列22b_信息化知识(中)

1. 信息化 1.1. 产品信息化 1.1.1. 信息化的基础 1.2. 企业信息化 1.2.1. 国民经济信息化的基础 1.3. 产业信息化 1.3.1. 【21下选08】 1.4. 国民经济信息化 1.5. 社会生活信息化 1.6. 【22上选08】 1.7. 基本内涵 1.7.1. 信息化的主体是全体社会成员,包…

日语文法PPT截图16-30

16句子的构成 单句 谓语只出现了一次 重句 两个谓语 并且两个谓语是对应的关系 由多个在意义上有差距的小句共同构成的句子 叫复文 用一个句子去修饰一个名词 也是个很典型的复文 被名词化了的句子充当小句,这也是复文的一种情况 引用形式的复文 对于这种复文的…

Java-API简读_java.util.RandomAccess接口(基于JDK1.8)(不涉及源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/130727525 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

史上最详细的SQL盲注入门教程

测试同学在做安全测试时,相信多少都会遇到SQL注入与盲注的漏洞,那么今天我们就来分享下SQL注入与盲注的相关知识,希望对大家有所启发。 一、SQL盲注的定义 SQL注入,简单理解,也就是将用户输的的内容当代码执行了&…

Docker的使用 (1.安装docker)

安装docker前非常重要的准备工作 请保证你的centos 操作系统为至少为7版本请关闭linux的防火墙虚拟机联网,安装好yum工具 安装docker # 设置docker镜像源 yum-config-manager \--add-repo \https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposed…

Aqua 启动管道完整性扫描以检测恶意软件

云原生安全提供商 Aqua Security 已宣布添加管道完整性扫描,以防止软件供应链攻击并确保 CI/CD 管道完整性。 在 eBPF 技术的支持下,Aqua 的管道完整性扫描器实时检测并阻止可疑行为和恶意软件,防止代码篡改并应对软件构建过程中的威胁。 该…

Spring Boot异常处理

目录 Spring Boot异常处理 介绍 拦截器VS 过滤器 自定义异常页面 自定义异常页面 代码实战 需求 代码实现 创建MyErrorController类来模拟异常错误 完成测试 全局异常 说明 全局异常-应用实例 创建GlobalExceptionHandler.java 创建对应的视图地址global.html 完成…

Docker的使用 (1.什么是docker)

前言 这个系列是我自己学习使用docker的记录和分享,作为一名开发人员,你需要了解这个东西并且学会它的简单使用,但是作为一名开发而不是运维,不要花过多的时间去深究它的原理,而是把它当作一个工具即可 docker Docke…

新的RA Group勒索软件针对美国组织进行双重勒索攻击

一个名为“RA Group”的新勒索软件组织针对美国和韩国的制药、保险、财富管理和制造公司。 新的勒索软件行动始于 2023 年 4 月,当时他们在暗网上启动了一个数据泄露站点,以发布受害者的详细信息和被盗数据,采用了大多数勒索软件团伙使用的典…