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

相关推荐
许野平16 分钟前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono
也无晴也无风雨20 分钟前
在JS中, 0 == [0] 吗
开发语言·javascript
狂奔solar28 分钟前
yelp数据集上识别潜在的热门商家
开发语言·python
Tassel_YUE29 分钟前
网络自动化04:python实现ACL匹配信息(主机与主机信息)
网络·python·自动化
聪明的墨菲特i36 分钟前
Python爬虫学习
爬虫·python·学习
blammmp1 小时前
Java:数据结构-枚举
java·开发语言·数据结构
何曾参静谧1 小时前
「C/C++」C/C++ 指针篇 之 指针运算
c语言·开发语言·c++
暗黑起源喵1 小时前
设计模式-工厂设计模式
java·开发语言·设计模式
WaaTong1 小时前
Java反射
java·开发语言·反射
Troc_wangpeng1 小时前
R language 关于二维平面直角坐标系的制作
开发语言·机器学习