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垂线标记图的画法,并对垂线密度、类型和起始圆圈、标记类型进行了修改,此外显示了各坐标轴的标签。

相关推荐
比花花解语2 分钟前
Java中Integer的缓存池是怎么实现的?
java·开发语言·缓存
学步_技术16 分钟前
Python编码系列—Python团队开发工作流:高效协作的艺术
开发语言·python·团队开发
柳鲲鹏18 分钟前
编译成功!QT/6.7.2/Creator编译Windows64 MySQL驱动(MinGW版)
开发语言·qt·mysql
三玖诶18 分钟前
如何在 Qt 的 QListWidget 中逐行添加和显示数据
开发语言·qt
追逐远方的梦28 分钟前
二级C语言2023-3易错题
c语言·开发语言
一个很帅的帅哥30 分钟前
实现浏览器的下拉加载功能(类似知乎)
开发语言·javascript·mysql·mongodb·node.js·vue·express
极客先躯39 分钟前
java和kotlin 可以同时运行吗
android·java·开发语言·kotlin·同时运行
shiming887943 分钟前
Python数据分析与可视化
开发语言·python·数据分析
William数据分析44 分钟前
Python数据分析与可视化实战指南
python·数据
kid_sup1 小时前
C语言错题本
c语言·开发语言