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

您所在的位置:网站首页 误差棒图怎么做 python随机生成数据并用双y轴绘制两条带误差棒的折线图

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

2023-05-27 11:04| 来源: 网络整理| 查看: 265

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 可以设置误差棒末端的横杠长度。

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

首先,我们需要导入 matplotlib 和 numpy 库,并创建两个子图 ax1 和 ax2。然后,我们使用 numpy库生成两组随机数据。最后,我们分别绘制两条折线,并使用 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() 函数添加误差棒即可。在具体实现时,可以根据需要设置误差棒的线型、颜色、标记符号、末端横杠长度等属性,以便更好地展示数据的变化范围。

四、运行结果

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3