当前位置: 首页 > news >正文

一周学会Matplotlib3 Python 数据可视化-绘制误差条形图

锋哥原创的Matplotlib3 Python数据可视化视频教程:

2026版 Matplotlib3 Python 数据可视化 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili

课程介绍

本课程讲解利用python进行数据可视化 科研绘图-Matplotlib,学习Matplotlib图形参数基本设置,绘图参数及主要函数,以及Matplotlib基础绘图,和Matplotlib高级绘图。

绘制误差条形图

误差条形图是数据可视化中展示数据不确定性或变异性的重要工具。Matplotlib提供了强大的功能来创建各种类型的误差条形图,包括对称误差、非对称误差、水平误差条等。

plt.errorbar() 是 Matplotlib 中用于绘制带误差线的数据点的核心函数,常用于科学可视化中展示数据的不确定性。以下是该方法的详细解析:

plt.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, **kwargs)

必需参数

参数类型说明
xarray数据点的 x 坐标值
yarray数据点的 y 坐标值

🔍 误差线控制参数

  1. 误差方向

参数默认值说明
yerrNoney方向的误差值,支持多种格式: - 标量:所有点使用相同误差值 - 一维数组:每个点单独误差值 - 2xN数组:[下误差, 上误差]
xerrNonex方向的误差值(格式同yerr
  1. 误差线样式

参数默认值说明
fmt''数据点标记格式(同plt.plot()格式) 例如:'o-'(圆点连线),'s--'(方形虚线)
ecolorNone误差线颜色(默认与数据点相同)
elinewidthNone误差线宽度(默认1.5)
capsizeNone误差线端帽长度(单位:点)
capthickNone误差线端帽厚度(默认同误差线)
  1. 特殊误差类型

参数默认值说明
lolims/uplimsFalse只显示下/上限的单向误差线
xlolims/xuplimsFalsex方向的单向误差线
barsaboveFalse误差线显示在数据点上方

我们看一个对称误差条形图示例:

import matplotlib.pyplot as plt
import numpy as np
​
# 创建示例数据
categories = ['A', 'B', 'C', 'D', 'E']
values = [23, 45, 56, 32, 67]
errors = [2.5, 3.2, 4.1, 2.8, 3.9]  # 对称误差值
​
plt.figure(figsize=(10, 6))
​
# 绘制条形图并添加误差条
bars = plt.bar(categories, values, color='skyblue', edgecolor='black', alpha=0.8)
plt.errorbar(categories, values, yerr=errors, fmt='none',ecolor='red', elinewidth=2, capsize=8, capthick=2)
​
# 添加数据标签
for bar in bars:height = bar.get_height()plt.text(bar.get_x() + bar.get_width() / 2., height + 1,f'{height:.1f}', ha='center', va='bottom', fontsize=10)
​
# 图表装饰
plt.title('基础对称误差条形图', fontsize=14, pad=20)
plt.xlabel('类别', fontsize=12)
plt.ylabel('测量值', fontsize=12)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.ylim(0, 80)
plt.tight_layout()
plt.show()

我们在看一个非对称误差条形图示例:

import matplotlib.pyplot as plt
import numpy as np
​
# 创建示例数据
categories = ['A', 'B', 'C', 'D', 'E']
values = [23, 45, 56, 32, 67]
# 非对称误差数据
lower_errors = [1.8, 2.5, 3.0, 2.0, 3.2]  # 下误差
upper_errors = [3.2, 3.8, 5.2, 3.6, 4.6]  # 上误差
asymmetric_errors = [lower_errors, upper_errors]  # 非对称误差格式
​
plt.figure(figsize=(10, 6))
​
# 绘制条形图
bars = plt.bar(categories, values, color='lightgreen', edgecolor='black', alpha=0.8)
​
# 添加非对称误差条
plt.errorbar(categories, values, yerr=asymmetric_errors, fmt='none',ecolor='purple', elinewidth=2, capsize=8, capthick=2)
​
# 添加数据标签
for bar in bars:height = bar.get_height()plt.text(bar.get_x() + bar.get_width() / 2., height + 1,f'{height:.1f}', ha='center', va='bottom', fontsize=10)
​
# 图表装饰
plt.title('非对称误差条形图', fontsize=14, pad=20)
plt.xlabel('类别', fontsize=12)
plt.ylabel('测量值', fontsize=12)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.ylim(0, 80)
plt.tight_layout()
plt.show()

分组误差条形图示例:

import numpy as np
​
# 创建多组数据
categories = ['Group 1', 'Group 2', 'Group 3', 'Group 4']
men_means = [22, 30, 35, 28]
women_means = [25, 32, 30, 35]
men_errors = [1.8, 2.5, 3.0, 2.5]
women_errors = [2.2, 2.8, 2.5, 3.0]
​
x = np.arange(len(categories))  # 标签位置
width = 0.35  # 条形宽度
​
plt.figure(figsize=(12, 7))
​
# 绘制男性组条形图
rects1 = plt.bar(x - width / 2, men_means, width,label='男性', color='royalblue', alpha=0.8,yerr=men_errors, error_kw=dict(elinewidth=2, ecolor='darkblue', capsize=6))
​
# 绘制女性组条形图
rects2 = plt.bar(x + width / 2, women_means, width,label='女性', color='lightcoral', alpha=0.8,yerr=women_errors, error_kw=dict(elinewidth=2, ecolor='darkred', capsize=6))
​
​
# 添加数据标签
def autolabel(rects):"""在条形图上方附加文本标签,显示条形高度"""for rect in rects:height = rect.get_height()plt.annotate(f'{height:.1f}',xy=(rect.get_x() + rect.get_width() / 2, height),xytext=(0, 3),  # 3点垂直偏移textcoords="offset points",ha='center', va='bottom', fontsize=10)
​
​
autolabel(rects1)
autolabel(rects2)
​
# 图表装饰
plt.title('分组误差条形图(按性别)', fontsize=14, pad=20)
plt.xlabel('实验组', fontsize=12)
plt.ylabel('平均得分', fontsize=12)
plt.xticks(x, categories)
plt.legend(loc='upper right', frameon=True)
plt.grid(axis='y', linestyle='--', alpha=0.5)
plt.ylim(0, 45)
plt.tight_layout()
plt.show()

水平误差条形图:

import matplotlib.pyplot as plt
import numpy as np
​
# 创建水平数据
countries = ['挪威', '德国', '加拿大', '美国', '荷兰']
gold_medals = [16, 12, 11, 9, 8]
errors = [1.2, 0.9, 1.1, 0.8, 0.7]  # 水平误差
​
plt.figure(figsize=(10, 6))
​
# 绘制水平条形图
bars = plt.barh(countries, gold_medals, color='gold', edgecolor='darkorange', height=0.7, alpha=0.9)
​
# 添加水平误差条
plt.errorbar(gold_medals, countries, xerr=errors, fmt='none',ecolor='darkred', elinewidth=2, capsize=6, capthick=2)
​
# 添加数据标签
for bar in bars:width = bar.get_width()plt.text(width + 0.5, bar.get_y() + bar.get_height() / 2,f'{width:.0f}', ha='left', va='center', fontsize=10)
​
# 图表装饰
plt.title('冬奥会金牌数(含不确定性)', fontsize=14, pad=20)
plt.xlabel('金牌数量', fontsize=12)
plt.ylabel('国家', fontsize=12)
plt.xlim(0, 20)
plt.grid(axis='x', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()

http://www.dtcms.com/a/332458.html

相关文章:

  • 自定义View学习记录之 滚动抽奖单片
  • 前端性能优化工具Performance面板实战指南
  • 为什么 /deep/ 现在不推荐使用?
  • Webpack详解
  • HTML 常用标签介绍
  • 经典回顾:Hive执行原理、MapReduce执行流程、Spark执行流程
  • html抽奖功能
  • Apache 如何支持SHTML(SSI)的配置方法
  • 更换cmd背景图片
  • C++ 优选算法 力扣 1004. 最大连续1的个数 II 滑动窗口 (同向双指针)优化 每日一题 详细题解
  • 【Java Web 快速入门】十、AOP
  • 活到老学到老之Jenkins Pipeline Job
  • spring-ai-alibaba 学习(二十五)——graph之内置节点
  • Linux815 shell:while
  • Spring Boot接口签名校验设计与实现
  • 设计模式(Design Patterns)
  • WEB安全--Java安全--Servlet内存马
  • DzzOffice 开发手册之系统的配置
  • 短剧小程序系统开发:打造个性化娱乐新体验
  • 【反序列化基本介绍】
  • 25.Linux 聚合链路与软件网桥
  • 【中微半导体】BAT32G139GK48FA 定时器B输入捕获测速(寄存器TBSR/TBIER/TB/TBGRA/TBGRC)
  • Struts文件泄露漏洞分析与修复方案
  • 企业级Spring事务管理:从单体应用到微服务分布式事务完整方案
  • Baumer高防护相机如何通过YoloV8深度学习模型实现驾驶员疲劳的检测识别(C#代码UI界面版)
  • MySQL 主键详解:作用与使用方法
  • 搭建前端开发环境 安装nvm nodejs pnpm 配置环境变量
  • MySQL、PolarDB、PolarDB-X、TableStore、MongoDB、TiDB、ClickHouse选型
  • 融合开源AI智能名片与链动2+1模式的微商新零售转型研究——基于S2B2C商城小程序的实践探索
  • 戴永红×数图:重构零售空间价值,让陈列创造效益!