python画图|3D垂线标记

在前述学习过程中,我们学习了二维坐标上的垂线标记画图,链接如下:

python画图|垂线标记系列_python画点相对x轴的垂线-CSDN博客

也学习了3D作图基本方法:

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

现在我们尝试将这二者结合,绘制3D垂线标记图。

【1】官网教程

打开下述链接,直达官网:

https://matplotlib.org/stable/gallery/mplot3d/stem3d_demo.html#sphx-glr-gallery-mplot3d-stem3d-demo-py

官网给出了非常简洁的程序,我们尝试一起解读一下。

【2】代码解读

首先依然是引入numpy用于计算、matplotlib用于绘图。

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

然后定义了一串变量,这里使用高等数学参数化定义函数的方法,先定义一个参数theta,然后将x、y和z都定义成关于theta的因变量。代码相对简洁,函数的定义非常高效。

复制代码
theta = np.linspace(0, 2*np.pi) #自变量theta取值范围[0,2pi)
x = np.cos(theta - np.pi/2) #定义因变量
y = np.sin(theta - np.pi/2) #定义因变量
z = theta  #定义因变量

最后定义了要输出3D图,指明3D图类型为垂线标记图。

复制代码
fig, ax = plt.subplots(subplot_kw=dict(projection='3d')) #定义画3D图
ax.stem(x, y, z) #指明3D图类型为垂线标记图

plt.show() #输出图形

输出后的图形为:

++图1++

由图1可见,3D垂线标记图自XOY平面画出了垂直Z轴的垂线,且在Z值的位置坐了圆形标记。

【3】代码修改

【3.1】垂线加密

将参数theta的取值增多,修改后的代码为;

复制代码
theta = np.linspace(0, 2*np.pi,100) #之前未曾定义自变量数量,现在将其明确为100个

输出结果为:

++图2++

由图2可见,随着参数取值的增多,垂线已经实现加密。

【3.2】垂线类型更新

默认的垂线是实现,尝试将其改为虚线,在ax.stem中增加linefmt=':',改后代码和图形如下:

复制代码
ax.stem(x, y, z,linefmt=':') 

图3

图3输出了虚线式的垂线。

【3.3】标记类型更新

默认的标记是一个圆球,尝试将其改为其他类型,在ax.stem中增加markerfmt='g',改后代码和图形如下:

复制代码
ax.stem(x, y, z,linefmt=':',markerfmt='g') 

++图4++

图4的顶端不再是圆形,而是绿色的实线。

【3.4】显示坐标轴标签

坐标轴标签是否显示对图像分析有很大影响,在plt.show()前面增加一行代码以输出坐标轴标签,,改后代码和图形如下:

复制代码
ax.set(xlabel='x', ylabel='y', zlabel='z')
plt.show() #输出图形

++图5++

图5已经将XYZ显示在坐标轴旁边。

【3.5】垂线起始位置更新

垂线的起始位置默认是0,现将其更新。在ax.stem()中增加bottom=2.5,改后代码和图形如下:

++图6++

图6的红色圆圈位于Z=2.5位置处。

继续修改bottom=100,此时的输出结果为:

++图7++

由图7可见,如果垂线起始圆圈位置放得过高,或者说与自变量的值相差太大,会削弱图像的表达能力。图7中真正要输出的变量在绿色线上,现在被压缩到很小的一片区域。

红色箭头指示的区域就是自变量的变化范围,这个值和100相比显然较小。

这提示我们以后设置垂线其实圆圈因考虑自变量值的范围。

【4】总结

本文学习了3D垂线标记图的画法,并对垂线密度、类型和起始圆圈、标记类型进行了修改,此外显示了各坐标轴的标签。

相关推荐
databook6 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar7 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户8356290780517 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_7 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机14 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机15 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机15 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机15 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i15 小时前
drf初步梳理
python·django
每日AI新事件15 小时前
python的异步函数
python