python画图|3D errorbars基础教程

【1】引言

前序学习了errorbar()函数的大部分功能,相关文章包括但不限于下述链接:

python画图|errorbar初探_python ax.errorbar-CSDN博客

python画图|errorbar()进阶教程- uplims, lolims和xuplims, xlolims应用_ax.errorbar(x, y + 0.5, xerr=xerr, yerr=yerr, upli-CSDN博客

python画图|errorbar()函数中的errorevery参数-CSDN博客

在此基础上,我们尝试从二阶的平面图过渡到三阶的立体图,因此有了本文。

【2】官网教程

点击下方链接,直达官网,在官网可以看到非常精炼的代码,我们一起学习。

https://matplotlib.org/stable/gallery/mplot3d/errorbar3d.html#sphx-glr-gallery-mplot3d-errorbar3d-py

【3】代码解读

首先,引入画图和计算模块:

import matplotlib.pyplot as plt #引入画图模块
import numpy as np #引入计算模块

之后定义画三维图:

ax = plt.figure().add_subplot(projection='3d') #定义要画3D图

然后定义了自变量和因变量:

t = np.arange(0, 2*np.pi+.1, 0.01) #定义自变量
x, y, z = np.sin(t), np.cos(3*t), np.sin(5*t) #定义因变量

为表示谨慎,我想提前输出x、y和z的值。在这里,x取了正弦值,y取了余弦值,z取了另一个正弦值。

之后先定义了一个常数,然后对这个常数进行了取整和取余计算:

estep = 15 #定义一个常数
i = np.arange(t.size) #定义一个数组,数组的长度刚好等于自变量的长度
zuplims = (i % estep == 0) & (i // estep % 3 == 0) #定义一个新变量,定义一个新变量,变量对两个值进行判断
# i%estep为对estep取余数,i // estep % 3为对estep先取整数再对3取余数
zlolims = (i % estep == 0) & (i // estep % 3 == 2)#定义一个新变量,变量对两个值进行判断
# i%estep为对estep取余数,i // estep % 3为对estep先取整数再对3取余数

之后就是非常高效的直接绘制3D errorbar图形,误差在Z轴方向输出,通过上述和estep有关的计算控制误差输出的位置:

ax.errorbar(x, y, z, 0.2, zuplims=zuplims, zlolims=zlolims, errorevery=estep) #画图,这里在Z轴方向上进行误差输出ax.set_xlabel("X label") #设置X轴名称
ax.set_ylabel("Y label") #设置Y轴名称
ax.set_zlabel("Z label") #设置Z轴名称plt.show() #输出图形

运行代码后的图像为:

图1

此时的完整代码为:

import matplotlib.pyplot as plt #引入画图模块
import numpy as np #引入计算模块ax = plt.figure().add_subplot(projection='3d') #定义要画3D图# setting up a parametric curve
t = np.arange(0, 2*np.pi+.1, 0.01) #定义自变量
x, y, z = np.sin(t), np.cos(3*t), np.sin(5*t) #定义因变量estep = 15 #定义一个常数
i = np.arange(t.size) #定义一个数组,数组的长度刚好等于自变量的长度
zuplims = (i % estep == 0) & (i // estep % 3 == 0) #定义一个新变量,定义一个新变量,变量对两个值进行判断
# i%estep为对estep取余数,i // estep % 3为对estep先取整数再对3取余数
zlolims = (i % estep == 0) & (i // estep % 3 == 2)#定义一个新变量,变量对两个值进行判断
# i%estep为对estep取余数,i // estep % 3为对estep先取整数再对3取余数ax.errorbar(x, y, z, 0.2, zuplims=zuplims, zlolims=zlolims, errorevery=estep) #画图,这里在Z轴方向上进行误差输出ax.set_xlabel("X label") #设置X轴名称
ax.set_ylabel("Y label") #设置Y轴名称
ax.set_zlabel("Z label") #设置Z轴名称plt.show() #输出图形

【4】代码改写

其实默认输出图像看得比价凌乱,因此尝试修改变量定义,让图像简单一些:

x, y, z = np.sin(t), np.sin(3*t), np.sin(5*t) #定义因变量

此时的输出图像为:

图2

然后尝试在X轴上增加误差线,改下下述代码:

ax.errorbar(x, y, z, xerr=0.2,zerr=0.2,xuplims=zuplims, xlolims=zlolims,zuplims=zuplims, zlolims=zlolims, ecolor=['r','g'],errorevery=2*estep) #画图,这里在Z轴方向上进行误差输出

运行代码后的输出图像为:

图3

根据图3我们看到有的线条有箭头,有的线条没有箭头。为探索这个原因,我们先尝试保存代码如下:

import matplotlib.pyplot as plt #引入画图模块
import numpy as np #引入计算模块ax = plt.figure().add_subplot(projection='3d') #定义要画3D图# setting up a parametric curve
t = np.arange(0, 2*np.pi+.1, 0.01) #定义自变量
x, y, z = np.sin(t), np.sin(3*t), np.sin(5*t) #定义因变量estep = 15 #定义一个常数
i = np.arange(t.size) #定义一个数组,数组的长度刚好等于自变量的长度
zuplims = (i % estep == 0) & (i // estep % 3 == 0) #定义一个新变量,定义一个新变量,变量对两个值进行判断
# i%estep为对estep取余数,i // estep % 3为对estep先取整数再对3取余数
zlolims = (i % estep == 0) & (i // estep % 3 == 2)#定义一个新变量,变量对两个值进行判断
# i%estep为对estep取余数,i // estep % 3为对estep先取整数再对3取余数ax.errorbar(x, y, z, xerr=0.2,zerr=0.2,xuplims=zuplims, xlolims=zlolims,zuplims=zuplims, zlolims=zlolims, ecolor=['r','g'],errorevery=2*estep) #画图,这里在Z轴方向上进行误差输出ax.set_xlabel("X label") #设置X轴名称
ax.set_ylabel("Y label") #设置Y轴名称
ax.set_zlabel("Z label") #设置Z轴名称plt.show() #输出图形

然后改写变量定义代码,让取值变少:

t = np.arange(0, 2*np.pi+.1, 0.1) #定义自变量

此时的输出图像为:

图4

在这里我们不见看到没有箭头的十字交叉线,也看到有箭头的线居然出现了双箭头,为此继续改写代码:

ax.errorbar(x, y, z, xerr=0.5,zerr=0.2,xuplims=zuplims, xlolims=zlolims,zuplims=zuplims, zlolims=zlolims, ecolor=['r','g'],errorevery=2*estep) #画图,这里在Z轴方向上进行误差输出

先把xerr值扩大到0.5,运行代码后的图像为:

图5

可见,X轴方向的误差线长度增长,但是好像给同一条线的颜色给了两次赋值,为谨慎起见,先调换一下ecolor中的颜色代码g和r的顺序,调换后如下:

ecolor=['g','r']

运行代码后的输出图像为:

图6

可见颜色依然赋值了两次。

为继续简化图形,修改变量定义:

t = np.arange(0, 6.1, 0.1) #定义自变量
x, y, z = t, t, t #定义因变量

此时的变量大幅减少,输出图像也更简洁,运行代码后的图像为:

图7

在途7中我们观察到在右侧上方出现了一个红色的十字,为探究为何会出现这种情况,我们修正一下代码的密度,把输出间隔改到1,输出所有自变量,把estep改到2,。改后代码如下:

t = np.arange(0, 8.1, 1) #定义自变量
x, y, z = t, t, t #定义因变量
print('t=',t)
estep = 2 #定义一个常数

此时的完整代码为:

import matplotlib.pyplot as plt #引入画图模块
import numpy as np #引入计算模块ax = plt.figure().add_subplot(projection='3d') #定义要画3D图# setting up a parametric curve
t = np.arange(0, 8.1, 1) #定义自变量
x, y, z = t, t, t #定义因变量
print('t=',t)
estep = 2 #定义一个常数
i = np.arange(t.size) #定义一个数组,数组的长度刚好等于自变量的长度
zuplims = (i % estep == 0) & (i // estep % 3 == 0) #定义一个新变量,定义一个新变量,变量对两个值进行判断
# i%estep为对estep取余数,i // estep % 3为对estep先取整数再对3取余数
zlolims = (i % estep == 0) & (i // estep % 3 == 2)#定义一个新变量,变量对两个值进行判断
# i%estep为对estep取余数,i // estep % 3为对estep先取整数再对3取余数
print('zuplims=',zuplims)
print('zlolims=',zlolims)
ax.errorbar(x, y, z, xerr=0.5,zerr=0.2,xuplims=zuplims, xlolims=zlolims,zuplims=zuplims, zlolims=zlolims, errorevery=2*estep) #画图,这里在Z轴方向上进行误差输出ax.set_xlabel("X label") #设置X轴名称
ax.set_ylabel("Y label") #设置Y轴名称
ax.set_zlabel("Z label") #设置Z轴名称plt.show() #输出图形

运行代码后的输出图像为:

图8

同时输出的部分还包括:

t= [0. 1. 2. 3. 4. 5. 6. 7. 8.]
zuplims= [ True False False False False False  True False False]
zlolims= [False False False False  True False False False False]

注意到errorevery=2*estep=4,在此基础上:

当输出了九个变量,在输出第一个、第五个和第九个变量的时候指定了方向。

为便于理解,把zuplims和zlolims的值输出:

看着比较复杂,其实只用看三个值:第1个第5个和第9个。

第一个位置up=True,lo=Flase,应该显示负向的误差线;

第二个位置up=Flase,lo=True,应该显示正向的误差线;

第三个位置up=Flase,lo=Flase,应该显示正负向的误差线。

如对上述分析存疑,需从errorevery参数的意义着手开始加深理解,可通过下文辅助理解:

python画图|errorbar()函数中的errorevery参数-CSDN博客

【5】总结

掌握了3D errorbars绘制方法。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RPA真的是人工智能吗?

1. RPA与AI的定义与区别 1.1 RPA的定义与特点 机器人流程自动化(Robotic Process Automation,简称RPA)是一种软件技术,它通过模拟人类用户的操作行为来自动执行重复性、基于规则的任务。RPA的核心特点包括: 非侵入性…

第23次CCF计算机软件能力认证

1. 数组推导 A 1 , A 2 , ⋯ , A n A_1, A_2, \cdots, A_n A1​,A2​,⋯,An​ 是一个由 n n n 个自然数(即非负整数)组成的数组。 在此基础上,我们用数组 B 1 ⋯ B n B_1 \cdots B_n B1​⋯Bn​ 表示 A A A 的前缀最大值。 B i max ⁡ {…

15-大模型 RAG 经验篇

一、LLMs 已经具备了较强能力了,存在哪些不足点? 在 LLM 已经具备了较强能力的基础上,仍然存在以下问题: 幻觉问题:LLM 文本生成的底层原理是基于概率的 token by token 的形式,因此会不可避免地产生"一本正经…

【网络云计算】2024第48周-技能大赛-初赛篇

文章目录 1、比赛前提2、比赛题目2.1、 修改CentOS Stream系统的主机名称,写出至少3种方式,并截图带时间戳和姓名,精确到秒,否则零分2.2、 创建一个名为你的名字的拼音的缩写的新用户并设置密码,将用户名添加到 develo…

C#编写的日志记录组件 - 开源研究系列文章

以前编写过一个日志记录组件的博文,这次发布一个修改过的完善版本。 1、 项目目录; 2、 源码介绍; 1) 实现; 2) 使用; 后面的参数为级别设置,只有大于这个级别的才进行日志记录,限制了日志记录的…

Qt桌面应用开发 第五天(常用控件)

目录 1.QPushButton和ToolButton 1.1QPushButton 1.2ToolButton 2.RadioButton和CheckBox 2.1RadioButton单选按钮 2.2CheckBox多选按钮 3.ListWidget 4.TreeWidget控件 5.TableWidget控件 6.Containers控件 6.1QScrollArea 6.2QToolBox 6.3QTabWidget 6.4QStacke…

css数据不固定情况下,循环加不同背景颜色

<template><div><p v-for"(item, index) in items" :key"index" :class"getBackgroundClass(index)">{{ item }}</p></div> </template><script> export default {data() {return {items: [学不会1, …

【计算机网络安全】湖北大学-mysql事务隔离性实验

参考数据库实验&#xff1a;并发控制实验&#xff08;MySQL&#xff09;-CSDN博客&#xff0c;大佬写的很好 目录 实验环境 事务的隔离级别 1. 读未提交 2. 读已提交 3. 可重复读 4. 序列化 三种要解决的并发问题 1. 脏读&#xff08;Dirty Read&#xff09; 2. 不可重…

版本控制【Git Bash】【Gitee】

目录 一、什么是版本控制&#xff1f; 二、版本控制的种类&#xff1a; 1、本地版本控制 2、集中版本控制 3、分布式版本控制 三、下载Git Bash 四、Git Bash 配置 五、Git Bash使用 1、切换目录&#xff1a;cd 2.查看当前文件路径&#xff1a;pwd 3.列出当前目录下文件…

Qt中实现旋转动画效果

使用QPropertyAnimation类绑定对应的属性后 就可以给这个属性设置对应的动画 //比如自定义了属性 Q_PROPERTY(int rotation READ rotation WRITE setRotation)//给这个属性加动画效果 //参数1&#xff1a;谁要加动画效果 //参数2&#xff1a;哪个属性加动画效果 //参数3&…

Docker 基础命令介绍和常见报错解决

介绍一些 docker 可能用到的基础命令&#xff0c;并解决三个常见报错&#xff1a; 权限被拒绝&#xff08;Permission Denied&#xff09;无法连接到 Docker 仓库&#xff08;Timeout Exceeded&#xff09;磁盘空间不足&#xff08;No Space Left on Device&#xff09; 命令以…

web——upload-labs——第十关——.空格.绕过

审计源码 这次先删除文件名左右的空格&#xff0c;然后又删除了我们文件末尾的.&#xff0c;其次将我们上传的文件名转换为小写&#xff0c;删除文件末尾的::$DATA&#xff0c;最后又删除了文件名左右两侧的空格 根据他的逻辑&#xff0c;我们可以构造文件名phpinfo.php. .就是…

Python | Leetcode Python题解之第564题数组嵌套

题目&#xff1a; 题解&#xff1a; class Solution:def arrayNesting(self, nums: List[int]) -> int:ans, n 0, len(nums)for i in range(n):cnt 0while nums[i] < n:num nums[i]nums[i] ni numcnt 1ans max(ans, cnt)return ans

Stable Diffusion核心网络结构——CLIP Text Encoder

&#x1f33a;系列文章推荐&#x1f33a; 扩散模型系列文章正在持续的更新&#xff0c;更新节奏如下&#xff0c;先更新SD模型讲解&#xff0c;再更新相关的微调方法文章&#xff0c;敬请期待&#xff01;&#xff01;&#xff01;&#xff08;本文及其之前的文章均已更新&…

如何在项目中用elementui实现分页器功能

1.在结构部分复制官网代码&#xff1a; <template> 标签: 这是 Vue 模板的根标签&#xff0c;包含所有的 HTML 元素和 Vue 组件。 <div> 标签: 这是一个普通的 HTML 元素&#xff0c;包裹了 el-pagination 组件。它没有特别的意义&#xff0c;只是为了确保 el-pagi…

海量数据面试题

目录 前言 什么是海量数据 一、利用位图解决 二、利用布隆过滤器解决 三、利用哈希切割解决 前言 在大数据时代&#xff0c;海量数据处理已成为技术领域中的一项重要课题。无论是企业级应用、互联网平台&#xff0c;还是人工智能和机器学习的实现&#xff0c;都离不开对大规…

Diff 算法的误判

起源&#xff1a; 设想一下&#xff0c;假如你桌面上的文件都没有文件名&#xff0c;取而代之的是&#xff0c;你使用通过文件的位置顺序即index来区分它们———第一个文件&#xff0c;第二个文件&#xff0c;以此类推。也许这种方式可行&#xff0c;可是一旦你删除了其中的一…

基于Java Springboot幼儿园管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

Misc_01转二维码(不是二进制)

例题ctfhub/隐写v2.0 打开是一张图片 文件分离得到zip&#xff0c;爆破密码得到7878 打开得到0和1&#xff0c; !!!不是二进制转图片&#xff0c;直接是二维码 缩小能看到 000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000…

5.4.2-1 编写Java程序在HDFS上创建文件

本次实战涉及使用Java操作Hadoop HDFS&#xff0c;包括创建文件、判断文件存在性及异常处理。通过手动添加依赖、启动HDFS服务&#xff0c;成功在HDFS上创建和检查文件。进一步探索了文件操作的最佳实践&#xff0c;如检查文件存在性以避免重复创建&#xff0c;以及处理HDFS安全…