python画图|在三维空间的不同平面上分别绘制不同类型二维图

news2024/11/28 21:37:01

【1】引言

前序已经完成了基础的二维图和三维图绘制教程探索,可直达的链接包括但不限于:

python画图|3D参数化图形输出-CSDN博客

python画三角函数图|小白入门级教程_正余弦函数画图python-CSDN博客

在学习过程中,发现一个案例: 在三维空间的不同平面上分别绘制不同类型二维图。

经过一段时间的学习,我对此有一些理解,现在分享出来和大家一起探讨。

【2】官网教程

打开下述链接可直达官网,官网的图形比较美丽,我对代码也进行了解读。

Plot 2D data on 3D plot — Matplotlib 3.9.2 documentation

【3】代码解读

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

import matplotlib.pyplot as plt #定义画图模块
import numpy as np #定义计算模块

然后非常丝滑地定义了要画三维图:

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

之后对xoy平面的图形进行了定义:

x = np.linspace(0, 1, 100) #定义自变量
y = np.sin(x * 2 * np.pi) / 2 + 0.5 #定义因变量
ax.plot(x, y, zs=0, zdir='z', label='curve in (x, y)') #在xoy平面画图

然后定义了一个新的数组:

colors = ('r', 'g', 'b', 'k') #设置colors数组

定义随机数种子:

np.random.seed(19680801) #定义随机数组种子

定义三个矩阵:

x = np.random.sample(20 * len(colors)) #定义新矩阵x,以colors数组的长度为基础,生成20倍长度数量的随机数据
y = np.random.sample(20 * len(colors)) #定义新矩阵y,以colors数组的长度为基础,生成20倍长度数量的随机数据
c_list = [] #定义空矩阵

自定义一个函数,对c_list[ ]矩阵进行填充:

for c in colors: #自定义函数
    c_list.extend([c] * 20) #对colors中的数据,乘以20后叠加到c_list

在XOZ平面绘制散点图:

ax.scatter(x, y, zs=0, zdir='y', c=c_list, label='points in (x, z)') #在xoz平面画图

有上式可以看出,c_list代表的是变化的颜色, 所以上面的自定义函数是调整散点图的颜色。

之后设置坐标轴的基本属性:

ax.legend() #输出图例
ax.set_xlim(0, 1) #设置X轴范围(0, 1)
ax.set_ylim(0, 1) #设置Y轴范围(0, 1)
ax.set_zlim(0, 1) #设置Z轴范围(0, 1)
ax.set_xlabel('X') #设置X轴标签为‘X’
ax.set_ylabel('Y') #设置Y轴标签为‘Y’
ax.set_zlabel('Z') #设置Z轴标签为‘Z’

最后输出图形:

ax.view_init(elev=20., azim=-35, roll=0) #视角角度转换

plt.show() #输出图形

这里的 ax.view_init()函数是对三维图的观察角度进行调整,我们接下来会进行探索。

获得的输出图形为:

图1

【4】代码改写

【4.1】尝试修改颜色矩阵:

colors = ('r', 'g', 'b', 'k','y') #设置colors数组

之前的自定义代码是100个取值,但colors数组中只有四个元素,及时乘以20也只有80个元素,但一共有100个输出值,为使颜色均匀分布,增加一个黄色的代码‘y’。代码简写链接可以参考下述链接:

https://matplotlib.org/stable/users/explain/colors/colors.html#colors-def

此时的输出图形为:

图2

【4.2】修改ax.view_init()函数

在上述基础上,修改ax.view_init()函数,将其改为:

ax.view_init(elev=90., azim=0, roll=0) #视角角度转换
ax.set_title('elev=90., azim=0, roll=0')

增加了一行 ax.set_title('elev=90., azim=0, roll=0')用以记录。

图3

 可见elev=90是指从Z轴垂直看XOY平面。

然后继续修改:

ax.view_init(elev=90., azim=90, roll=0) #视角角度转换
ax.set_title('elev=90., azim=90, roll=0')

输出结果为:

图4

 可见elev=90,azim=90是指在从Z轴垂直看XOY平面的基础上,对XOY平面继续顺时针旋转90度。

然后继续修改:

ax.view_init(elev=90., azim=90, roll=90) #视角角度转换
ax.set_title('elev=90., azim=90, roll=90')

输出结果为:

图5

 可见elev=90,azim=90, roll=90是指在从Z轴垂直看XOY平面,对XOY平面顺时针旋转90度的基础上,再对整个图顺时针旋转90度

未验证上述结论,继续修改:

ax.view_init(elev=90., azim=60, roll=90) #视角角度转换
ax.set_title('elev=90., azim=60, roll=90')

输出图形为:

图6

可以看出:elev=90,azim=60, roll=90是指在从Z轴垂直看XOY平面,对XOY平面顺时针旋转960度的基础上,再对整个图顺时针旋转90度

 【5】结论

探索了在三维空间的不同平面上分别绘制不同类型二维图的教程。

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

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

相关文章

XGBoost回归预测 | MATLAB实现XGBoost极限梯度提升树多输入单输出

回归预测 | MATLAB实现XGBoost极限梯度提升树多输入单输出 目录 回归预测 | MATLAB实现XGBoost极限梯度提升树多输入单输出预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 XGBoost的全称是eXtreme Gradient Boosting,它是经过优化的分布式梯度提升库,旨在高效、…

优化UVM环境(三)-环境发包较多时,会触发timeout

书接上回: 优化UVM环境(一)-环境结束靠的是timeout,而不是正常的objection结束 优化UVM环境(二)-将error/fatal红色字体打印,pass绿色字体打印 环境发包较多时,会触发timeout 解决…

SpringBoot +Vue3前后端分离项目入门基础实例五

项目说明 项项目名称使用框架说明后端项目springboot_vue_element_demoSpringBoot + MyBatis-plus + MySQL完成基本的增删改查操作API前端项目vue-projectVue3 + ElementUI plus + axios界面展示,调用后端API项目文档目录 SpringBoot +Vue3前后端分离项目入门基础实例一 Spri…

机器学习:opencv--人脸检测以及微笑检测

目录 前言 一、人脸检测的原理 1.特征提取 2.分类器 二、代码实现 1.图片预处理 2.加载分类器 3.进行人脸识别 4.标注人脸及显示 三、微笑检测 前言 人脸检测是计算机视觉中的一个重要任务,旨在自动识别图像或视频中的人脸。它可以用于多种应用&#xff0…

【C++】- STL之vector模拟实现

1.vector的介绍 vector是表示可变大小数组的序列容器。vector采用的连续存储空间来存储元素。意味着也可以采用下标对vector的元素进行访问,和数组一样高效。但是它的大小是可以动态改变的,而且它的大小会被容器自动处理。vector使用动态分配数组来存储它…

三子棋(C 语言)

目录 一、游戏设计的整体思路二、各个步骤的代码实现1. 菜单及循环选择的实现2. 棋盘的初始化和显示3. 轮流下棋及结果判断实现4. 结果判断实现 三、所有代码四、总结 一、游戏设计的整体思路 (1)提供一个菜单让玩家选择人机对战、玩家对战或者退出游戏…

企业电子印章主要通过以下几种方式进行防伪

企业电子印章主要通过以下几种方式进行防伪: 一、数字证书和加密技术 数字证书认证 企业电子印章依托数字证书,数字证书由权威的第三方数字认证机构颁发,确保了印章使用者的身份真实性。 数字证书如同企业在数字世界的身份证,包…

Python 工具库每日推荐 【sqlparse】

文章目录 引言SQL解析工具的重要性今日推荐:sqlparse工具库主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例案例:SQL查询分析器案例分析高级特性自定义格式化处理多个语句扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 Python工具库每日推荐 专…

SpringCloud-持久层框架MyBatis Plus的使用与原理详解

在现代微服务架构中,SpringCloud 是一个非常流行的解决方案。而在数据库操作层面,MyBatis Plus 作为 MyBatis 的增强工具,能够简化开发,提升效率,特别是在开发企业级应用和分布式系统时尤为有用。本文将详细介绍 MyBat…

我们是不是有点神话了OPENAI和CHATGPT?OPENAI真的Open?

网上很多人大力推荐和神化OPENAI的CHATGPT等产品,好像这神器无所不能!也不知道是VPN代理商为了给自己做广告?还是CHATGPT注册代理推销产品?或者有可能是国外宣传CHATGPT文章直接翻译过来的?不可否认CHATGPT确实是一款伟大的产品,但有些情况…

HarmonyOS的DevEcoStudio安装以及初步认识

目录 1.DevEco下载 2.DevEco安装 3. 未开启Hyper-V 1--开启Hyper-v流程 4.编译错误 5.目录结构 1)AppScope 2)entry: 3)build 4)entry->src 5)entry->src->main->etc 6)entry->src->main…

Shell编程-if和else

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们前面学习了那么多命令,以及涉及到部分逻辑判断的问题。从简单来说,他就是Shell编程,…

一键快捷回复软件助力客服高效沟通

双十一临近,电商大战一触即发!在这个购物狂欢的热潮中,客服团队的效率至关重要。今天我要和大家分享一个非常实用的快捷回复软件,特别是为电商客服小伙伴们准备的。这款软件能够极大地提高你的工作效率,让你在处理客户…

小程序开发设计-模板与配置:WXML模板语法⑨

上一篇文章导航: 小程序开发设计-协同工作和发布:协同工作⑧-CSDN博客https://blog.csdn.net/qq_60872637/article/details/142455703?spm1001.2014.3001.5501 注:不同版本选项有所不同,并无大碍。 目录 上一篇文章导航&…

OpenAI 公布了其新 o1 模型家族的元提示(meta-prompt)

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

开发板资源介绍【STM32MP157 学习笔记】

引言 FS-MP1A 开发板是基于 ST(意法半导体)公司的 STM32MP1 系列微处理器设计的先进开发板。该系列处理器集成了 Arm Cortex-A7 和 Cortex-M4 两种内核的异构架构,在高性能和灵活性的基础上,保证了低功耗、实时控制和高度集成化。…

阿里 C++面试,算法题没做出来,,,

我本人是非科班学 C 后端和嵌入式的。在我面试的过程中,竟然得到了阿里​ C 研发工程师的面试机会。因为,阿里主要是用 Java 比较多,C 的岗位比较少​,所以感觉这个机会还是挺难得的。 阿里 C 研发工程师面试考了我一道类似于快速…

深度学习-22-基于keras的十大经典算法之深度神经网络DNN

文章目录 1 深度神经网络(DNN)1.1 DNN简介1.2 DNN基本结构2 模拟应用2.1 构建模型2.2 训练模型2.3 模型预测3 鸢尾花数据集3.1 加载数据3.2 构建模型3.3 训练模型3.4 模型预测4 问题及解决5 参考附录1 深度神经网络(DNN) 1.1 DNN简介 背景:深度神经网络(DNN)也叫多层感…

歌曲怎么去掉原唱只留伴奏?创作无界,轻松获取伴奏音轨

在音乐制作、翻唱或是卡拉OK等场合,我们经常需要歌曲的伴奏版本,即去掉原唱声音,只保留背景音乐的部分。然而,并非每首歌曲都会官方发布伴奏版本,这时我们就需要借助一些技术手段来实现这一目标。本文将介绍几种常见的…

linux线程 | 同步与互斥(上)

前言:本节内容主要是线程的同步与互斥。 本篇文章的主要内容都在讲解互斥的相关以及周边的知识。大体的讲解思路是通过数据不一致问题引出锁。 然后谈锁的使用以及申请锁释放锁的原子性问题。 那么, 废话不多说, 现在开始我们的学习吧&#x…