python画图|3D参数化图形输出

前面已经学习了基本的3D作图,具体链接如下:

基础教程:python画图|3D图基础教程-CSDN博客

直方图教程:python画图|3D直方图基础教程-CSDN博客

垂线标记教程:python画图|3D垂线标记-CSDN博客

3D surface教程:python画图|3D surface基础教程-CSDN博客

在此基础上,今天尝试学习参数化图形输出教程。

【1】官网教程

首先依然是进入官网学习:

https://matplotlib.org/stable/gallery/mplot3d/lines3d.html

官网示例给出了漂亮的参数化曲线结果,下述为对官网代码的解读。

【2】代码解读

首先引入numpy和matplotlib。

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

然后快速定义了要画3D图:

ax = plt.figure().add_subplot(projection='3d') #定义画图,指明为3D图

画图应当有数据,因此定义了参数和各个变量:

theta = np.linspace(-4 * np.pi, 4 * np.pi, 100) #定义参数变量theta
z = np.linspace(-2, 2, 100) #定义参数变量z
r = z**2 + 1 #定义因变量r
x = r * np.sin(theta) #定义自变量x
y = r * np.cos(theta) #定义自变量y

 上述代码中,theta为最初的参数;但这里同样把Z也取成了参数。

然后,定义了按照x、y和z的方式输出图形:

ax.plot(x, y, z, label='parametric curve') #定义输出图形

最后对图形属性做了规定:

ax.plot(x, y, z, label='parametric curve') #定义输出图形
ax.legend() #定义输出标签
plt.show() #输出图形

完整的代码注解和输出图形为:

import matplotlib.pyplot as plt #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算ax = plt.figure().add_subplot(projection='3d') #定义画图,指明为3D图# Prepare arrays x, y, z
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100) #定义参数变量theta
z = np.linspace(-2, 2, 100) #定义参数变量z
r = z**2 + 1 #定义因变量r
x = r * np.sin(theta) #定义自变量x
y = r * np.cos(theta) #定义自变量yax.plot(x, y, z, label='parametric curve') #定义输出图形
ax.legend() #定义输出标签
plt.show() #输出图形

图1

【3】代码修改

在代码修改前,我们先在plt.show()前加一行代码用以输出轴标签:

ax.set(xlabel='x',ylabel='y',zlabel='z') #要求输出坐标轴标签

【3.1】交换r和Z

官网教程将Z定义为参数,现在尝试交换r和Z,Z作为因变量,改后代码为:

# Prepare arrays x, y, z
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100) #定义参数变量theta
r = np.linspace(-2, 2, 100) #定义参数变量r
z = r**2 + 1 #定义因变量z
x = z * np.sin(theta) #定义自变量x
y = z * np.cos(theta) #定义自变量y

此时的输出结果为:

图2

可见,新的代码下输出图像已经完全不同。

【3.2】交换x和z

官网教程将plot输出图形时按照xyz的顺序,现在尝试携程zyx的顺序,改后代码为:

ax.plot(z, y, x, label='parametric curve') #定义输出图形

输出结果为:

图3

由图3和图2对比可见,图形“底座”从xoy平面旋转到了yoz平面。

至此的完整代码为:

import matplotlib.pyplot as plt #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算ax = plt.figure().add_subplot(projection='3d') #定义画图,指明为3D图# Prepare arrays x, y, z
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100) #定义参数变量theta
r = np.linspace(-2, 2, 100) #定义参数变量r
z = r**2 + 1 #定义因变量z
x = z * np.sin(theta) #定义自变量x
y = z * np.cos(theta) #定义自变量yax.plot(z, y, x, label='parametric curve') #定义输出图形
ax.legend() #定义输出标签
ax.set(xlabel='x',ylabel='y',zlabel='z') #要求输出坐标轴标签
plt.show() #输出图形

【4】改写代码

尝试完全修改参数和变量,依然按照xyz的顺序输出,改后代码为:

theta = np.linspace(-4 * np.pi, 4 * np.pi, 100) #定义参数变量theta
x = theta #定义自变量x
y =np.cos(theta) #定义自变量y
z =np.sin(theta) #定义自变量zax.plot(x, y, z, label='parametric curve') #定义输出图形

输出图形为:

图4

图4展示了新的输出图形。

未做对比,继续修改代码,设定z=0:

z =0 #定义自变量z

输出结果为:

图5

可见,在xoy,输出了 y =np.cos(x)的正弦函数图像。

【5】总结

学习了3D参数化图形输出,尝试修改了参数和函数,均获得了期待的3D图形。

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

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

相关文章

Kamailio-基于Homer与heplify的SIP信令监控-2

接上篇,我们已经顺利地完成了服务的安装,下面就来看看如何配置并启动。 跟着我,你将学会: 下载并安装 踩坑:按照官方步骤来,可是网络条件不允许 获取YUM源下载RPM包手动解压安装避坑 配置并启动&#xf…

如何计算光伏在安装过程中的损耗程度?

光伏系统在实际安装和运营过程中,会受到多种因素的影响,导致电能损耗。这些损耗包括线缆损耗、逆变器效率、组件品质、灰尘积累、入射角损失等。 一、光伏系统损耗的分类 光伏系统的损耗大致可以分为以下几类: 1、线缆损耗:光伏…

文件外发怎么保证安全

为了确保文件在外发过程中的安全,金刚钻信息网站的防泄密系统支持以下多种措施来防止数据泄露和未经授权的访问: 1. 文件加密 加密文件:在文件外发前对其进行加密处理,确保只有持有解密密钥或密码的人才能访问文件内容。加密工具…

uview-plus 表单校验 相关字段有数据有值的情况下非空验证失败问题

你们好,我是金金金。 场景 uniapp编写h5及小程序,组件库用的uview-plus,在进行表单校验的过程中,数据回显 数量明明是有值的,还是依旧提示填写数量(重新再次手动输入才能校验通过,明显是存在问题…

电子电路产业园废水处理与资源回收的创新实践

随着电子产品的普及和技术革新步伐的加快,电子电路制造业已成为推动现代科技发展的关键力量之一。然而,随之而来的环保问题不容忽视。电镀工艺作为电子电路生产中的一个核心环节,其产生的含镍废水处理成为了企业必须面对的重要课题。本文将探…

Oracle发邮件功能:设置的步骤与注意事项?

Oracle发邮件配置教程?如何实现Oracle发邮件功能? Oracle数据库作为企业级应用的核心,提供了内置的发邮件功能,使得数据库管理员和开发人员能够通过数据库直接发送邮件。AokSend将详细介绍如何设置Oracle发邮件功能。 Oracle发邮…

悟空crm客户管理系统二次开发 单独新增表格字段

1,仪表盘(数据来源修改) 注意点:有层级关系,管理员账号可以看到全部数据,主管只能看到下属数据。 2、在客户管理菜单里面 增加一个时间筛选、额度汇总 /*** 获取客户列表** param $type* param $content*…

vagrant+virtualbox+ubuntu22.04无法上网问题

一、过程 vagrantfile配置私有网络 config.vm.network "private_network", ip: "192.168.56.10"启动虚拟机,可以ping通百度的实际IP,ping不通域名修改/etc/netplan/50-vagrant.yaml,配置DNS network:renderer: Networ…

2024年9月一区SCI-神经种群动态优化算法NPDOA-附Matlab免费代码

引言 本期介绍了一种受脑神经科学启发的元启发式算法,称为神经种群动态优化算法Neural population dynamics optimization algorithm(NPDOA)的元启发式算法。该成果于2024年9月最新发表在中科院1区 Top SCI期刊 Knowledge-Based Systems。 原文作者将NPDOA与其他9种…

智慧体育场馆:科技引领未来运动体验

在当今数字化时代,​智慧体育场馆​的建设不仅提升了观众、运动员和管理者的体验质量,也为体育产业注入了新的活力和创新。通过整合先进科技和智能系统,体育场馆能够实现更高效的运营管理、提升赛事体验以及优化资源利用。以下是古河云科技构…

JavaSE - 易错题集 - 006

1. 哪个正确 A abstract类只能用来派生子类,不能用来创建abstract类的对象。 B final类不但可以用来派生子类,也可以用来创建final类的对象。 C abstract不能与final同时修饰一个类。 D abstract类定义中可以没有abstract方法。 正确答案&#xff1…

GMB外链是什么?

GMB外链其实就是百万外链,它是一种通过大量反向链接来提升网站页面权重的方法。如果你刚建了一个新网站,想在短时间内被收录并获得排名,GMB外链能帮你做到这点。它不像传统SEO那样需要等待好几个月的效果,GMB外链能在24小时内帮你…

TVS瞬态抑制二极管,单向和双向有什么区别?

1、TVS瞬态抑制二极管的分类 根据方向来分,有单向和双向之分; 根据外形来看,有直插和贴片之分; 根据工作电压来分,有高压和低压之分; 根据功率大小来分,有小功率和大功率之分; …

论文解读《NewsBench:一个评估中文新闻大型语言模型编辑能力的系统评估框架》

引言:感觉这篇文章,对 LLMs 的新闻编辑能力做了一个详细的实验和分析,而且还贡献了一个宝贵的中文新闻数据集,蛮不错的,后面或许可以用起来,就拜读了一下。 这篇博客的题目说是解读,其实大部分…

在Ubuntu中编译含有JSON的文件出现报错

在ubuntu中进行JSON相关学习的时候,我发现了一些小问题,决定与大家进行分享,减少踩坑时候出现不必要的时间耗费 截取部分含有JSON部分的代码进行展示 char *str "{ \"title\":\"JSON Example\", \"author\&…

Debian11源码安装mysql5.7

#!/bin/bash# 安装依赖 apt-get update && apt-get install -y wget make gcc g cmake bison libncurses5-dev libssl-dev libtool pkg-config> /dev/null # 安装包所在目录 packages"/usr/local/src" # 数据目录 datadir"/hskj/mysql" # pid文…

解决Docker镜像不可下载

使用国内可信的镜像中心 可信国内镜像网址:https://hub.atomgit.com/ 点击镜像仓库 搜索想要的镜像 按如图所示,即可查看对应的版本 点击复制,即可下载使用 缺点: 可用的镜像相比于docker官方量少 并且,获取的镜像名字…

文献速递 | E3泛素连接酶PELI2介导STING信号激活的阈值设定

自从2013年cGAS被发现,cGAS-STING通路在检测和应对病毒和细菌感染等外部威胁和癌症发展等内部威胁中的作用已经越来越多的被提及。cGAS-STING通路几乎无处不在,它可以监测细胞质中的dsDNA,而dsDNA是病原体感染、细胞损伤和癌症等多种威胁的危…

OM6626国产低功耗蓝牙对比NRF52832/NRF52810

OM6626 是一款超低功耗的蓝牙soc 主要特性: 支持BLE5.3支持SIG Mesh支持2.4G长包主频64Mhz,80KB RAM主要应用在esl电子价签,IoT模组、CGM、高报告率HID设备 PUM特点 1.71~3.6v供电电压1秒间隔广播平均电流:9uA;1秒间…

会议室占用【python实现】

题目来自此 思路见代码随想录合并区间 def main():import astmeetings ast.literal_eval(input())meetings.sort(keylambda x:x[0])result [meetings[0]]for meeting in meetings:if meeting[0] < result[-1][1]:result[-1][1] meeting[1]else:result.append(meeting)pr…