首页 > 编程语言 >python画图|在三维空间的不同平面上分别绘制不同类型二维图

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

时间:2024-10-15 22:49:13浏览次数:9  
标签:python 画图 azim colors 三维空间 elev ax 90 roll

【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】结论

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

标签:python,画图,azim,colors,三维空间,elev,ax,90,roll
From: https://blog.csdn.net/weixin_44855046/article/details/142965149

相关文章

  • Python入门-面相对象——class(类)、封装、继承、多态、类型注解
    面向对象面向对象就是设计一个类,基于类创建对象,并使用创建出来的类完成具体的工作面向对象的三大特性:封装、继承、多态面向对象基本概述:属性:名词,用来描述事物的外在特征的,例如:姓名,性别,年龄,身高,体重...行为:动词,表示事物能够做什么,例如:......
  • python+flask计算机毕业设计在线教育平台(程序+开题+论文)
    文件加密系统的设计与实现tp835本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,教育领域正经历着前所未有的变革。在线教育平台作为互联网+教育的重要产物,已经逐......
  • python+flask计算机毕业设计中电科海信院培训考试系统的设计与实现(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和企业培训需求的日益增长,构建一个高效、便捷的培训考试系统已成为众多企业和研究机构的重要任务。中电科海信院作......
  • python+flask计算机毕业设计智慧点餐系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,智能化、便捷化的服务已成为现代生活的重要组成部分。在餐饮行业,传统的点餐方式已难以满足顾客日益增长的个性化需......
  • python+flask计算机毕业设计跃动小商品在线交易系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和电子商务的蓬勃兴起,线上交易已成为人们日常生活不可或缺的一部分。小商品市场作为经济体系中的重要组成部分,其......
  • 【攻防世界】Web_python_template_injection
    Web_python_template_injection:python模板漏洞python的flask模板注入的题思路比较固定,Jinja2模板引擎中,{{}}是变量包裹标识符。{{}}并不仅仅可以传递变量,还可以执行一些简单的表达式。1.先判断是否存在注入{{config}}2.获取基本类:{{''.__class__.__mro__}}.__class......
  • 【PAT_Python解 带全部测试点】1068 万绿丛中一点红
    原题链接:PTA|程序设计类实验辅助教学平台测试点0:独一无二测试点1: NotUnique测试点2:NotExist测试点3:独一无二       点在边缘(相邻数值不足8个)45207000000000400000070答案:(4,3):4测试点5:点在边缘(相邻数值不足8个)4520000......
  • python类与魔法方法
    文章目录1.类的创建与实例化2.类的魔法方法3.类属性与函数4.类的继承与改写4.1继承属性与函数4.2多重多继承4.3super()函数(减少反复继承初始化)4.4继承中mro与函数调用顺序4.5父类的重写与调用5.多态、类方法6.模块导入6.1导入文件6.2导包路径问题7.prope......
  • 基于yolov8、yolov5的烟雾检测系统(含UI界面、训练好的模型、Python代码、数据集)
    项目介绍项目中所用到的算法模型和数据集等信息如下:算法模型:  yolov8、yolov8+SE注意力机制或yolov5、yolov5+SE注意力机制,直接提供最少两个训练好的模型。模型十分重要,因为有些同学的电脑没有GPU,无法自行训练。数据集:  网上下载的数据集,格式都已......
  • python实现了通过摄像头检测手部动作,根据手指数量的不同映射为特定的视频控制操作
    importcv2#导入OpenCV库,用于图像处理importmediapipeasmp#导入MediaPipe库,用于手部检测等fromseleniumimportwebdriver#导入selenium库fromselenium.webdriver.common.keysimportKeysfromselenium.webdriver.common.byimportByfromselenium.webdrive......