绘制3D图

本文详细介绍了如何使用Python的matplotlib库和mpl_toolkits.mplot3d模块创建3D参数曲线,包括设置参数、创建图形、添加3D子图和绘制曲线的过程,以及关键配置如字体大小和图例的使用。
摘要由CSDN通过智能技术生成

~ 今天的代码学习——绘制3D图(参数曲线)
代码

# @Author  : 发疯的谢必安
# @Time    : 2024/3/18 19:20
# @Description: 3D 曲线
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
mpl.rcParams[ 'legend.fontsize']= 10
fig = plt.figure()
ax= fig.add_subplot(111, projection='3d')
theta =np.linspace(-4 * np.pi, 4 * np.pi, 100)
z=np.linspace(-4,4,100)*0.3
r = z ** 3 + 1
x = r * np.sin(theta)
y = r * np. cos(theta)
ax.plot(x,y,z, label= 'parametric curve' )
ax.legend()
plt. show()

方法及参数

  1. mpl.rcParams: 这是一个配置字典,允许你自定义多种 matplotlib 的样式和行为配置。rcParams 中的 rc 意味着 “runtime configuration”(运行时配置)。
  2. legend.fontsize: 这是 mpl.rcParams 字典中的一个键,用于设置图例中字体的大小。fontsize 字面上的意思是 “字体大小”。
  3. plt.figure(): 这是 matplotlib.pyplot 模块中的一个函数,用于创建一个新的图形。figure 字面意思是 “图形”,在 matplotlib 中,它是绘图的顶级容器
  4. fig.gca(projection='3d'):
    • fig: 是之前通过 plt.figure() 创建的图形实例的变量名。
    • gca: 是 figure 实例的方法,代表 “get current axis”(获取当前坐标轴)。该方法返回当前活动的轴实例,如果没有活动的轴实例,则创建一个新的。
    • projection='3d': 是 gca 方法的参数,表示请求的坐标轴应该是三维的。字面意义是 “投影”,这里用来指定创建的坐标轴是三维空间坐标轴。
  5. np.linspace: 这是 numpy 库中的一个函数,用于生成一个等间隔的数字数组。linspace 中的 lin 表示 “linear”(线性的),space 表示 “spacing”(间隔),整体含义是“线性间隔”。
  6. theta, z, r, x, y: 这些变量名代表的是数学中常用的参数和变量名,用于计算和表示3D参数曲线的不同维度:
    • theta: 通常用于极坐标或球坐标系统中表示角度的一个变量。
    • z: 这里指的是3D空间中的第三个坐标,与二维平面的 xy 坐标轴垂直。
    • r: 在极坐标系统中,r 通常表示距原点的半径。在这段代码中,rz 相关,用于计算 xy
    • xy: 代表3D空间中的水平和垂直坐标轴。
  7. ax.plot: 这是 Axes3D 对象的方法,用于在三维空间中绘制线条或者标记点。
    • ax: 代表了当前的三维坐标轴实例
    • plot: 字面上是 “画图” 或 “绘制” 的意思,这里用于绘制数据点形成的线条。
  8. label='parametric curve': label 参数在 plot 方法中用于指定为这条曲线设置的图例名称。parametric curve 直译为 “参数曲线”,表示这是按照参数方程定义的曲线。
  9. plt.show(): 这是 matplotlib.pyplot 模块的函数,用于显示所有已经绘制的图形。show 字面上的意思是 “展示”。

关于ax= fig.add_subplot(111, projection=‘3d’)

matplotlib 中,fig.add_subplot() 方法用于向图形窗口(figure)中添加一个子图(subplot)。这个方法非常灵活,允许你定制子图的布局和特性。当你想要在一个图形窗口中展示多个图表,或者创建特定的图表布局时,add_subplot 方法是非常有用的。

方法解释

  • fig: 这是你想要添加子图的图形窗口(figure)的实例。在 matplotlib 中,你通常首先创建一个 figure 实例,然后在这个 figure 上添加一个或多个子图(subplots)。

  • add_subplot(): 这个方法属于 figure 类。它的作用是在 figure 中添加一个新的子图。

参数解释

add_subplot 方法有几种不同的参数形式,但其中最常见的是三个整数的形式(nrows, ncols, index),或者是一个三位整数(如 111)。在调用 add_subplot(111, projection='3d') 时,参数的意义如下:

  • 111(或 nrows, ncols, index): 这三个整数参数定义了子图的格局和位置。

    • nrowsncols 这两个参数将 figure 窗口分割成 nrows * ncols 的网格(行×列)。在这个例子中,111 相当于 nrows=1ncols=1,意味着整个 figure 只包含一个子图。

    • index 这个参数指定了子图在网格中的位置。索引从1开始,左到右,上到下编号。在这个例子中,只有一个子图,所以 index 也是1。

  • projection=‘3d’: 这个参数指定了子图的类型。通过设置 projection='3d',告诉 matplotlib 你想要创建一个三维轴(Axes),而不是默认的二维轴。这需要 mpl_toolkits.mplot3d 模块中的功能,该模块通过在代码中导入来激活三维绘图能力。

使用示例

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D  # 尽管看起来我们没有直接使用这个导入,但它是必须的,以注册3D投影
fig = plt.figure()  # 创建一个figure对象
ax = fig.add_subplot(111, projection='3d')  # 向这个figure添加一个3D子图
# 现在你可以使用ax实例来绘制三维图形了

通过这种方式,你可以创建三维的散点图、曲面图、线图等。add_subplot 方法以及 projection='3d' 参数是创建三维可视化的关键步骤。


Debug~

当你看到“未使用的import语句”这样的警告时,这意味着你的代码中导入了一个模块或者库,但之后并没有直接使用它。在mpl_toolkits.mplot3dAxes3D 的情况下,这个警告可能会令人困惑,因为 Axes3D 的导入方式与其他模块略有不同。

在使用 matplotlibmplot3d 来创建三维图时,你通常会这样开始你的代码:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

你可能会遇到这样的情况:虽然你导入了 Axes3D,但实际上并没有在代码中显式地引用 Axes3D 类。这是因为在 matplotlib 的早期版本中,仅仅通过导入 Axes3D 就足以注册三维投影,这使得你可以创建三维轴而不需要直接使用 Axes3D 类。因此,即使看起来你没有使用 Axes3D,只要你添加了三维轴,导入它就是必要的。在这种情况下,你的代码可能会是这样的:

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

这里,三维轴是通过 add_subplot 方法的 projection='3d' 参数创建的,而不是直接使用 Axes3D 实例。因此,IDE或代码编辑器可能会认为 Axes3D 的导入是未使用的。

然而,最新的 matplotlib 版本已经改进了这一点,使得即使不显式导入 Axes3D,只要你使用 projection='3d' 参数,三维轴也能成功创建。这意味着在新版本的 matplotlib 中,如果你的代码不直接使用 Axes3D 类,你可以不导入它,从而避免“未使用的import语句”的警告。

如果你确定你需要在你的代码中保留这个导入(例如,为了确保向后兼容性),但想要避免警告,你可以考虑使用一个IDE或编辑器特定的方法来抑制这个特定的警告。不过,对于大多数用途而言,只要你确保使用的 matplotlib 版本不要求显式导入 Axes3D,你就可以安全地移除这个导入语句。


end

import matplotlib as mpl
# from mpl_toolkits.mplot3d import Axes3D
# mpl_toolkits.mplot3d 是 matplotlib 库中用于3D图形的模块,
# Axes3D() 方法用于创建实例
import numpy as np
import matplotlib.pyplot as plt
# runtime configuration parametric ,运行时配置参数,图例的字体大小设置为10
mpl.rcParams[ 'legend.fontsize']= 10
# figure 是顶级容器,可以看作是画布,创建画布 ,实例化
fig = plt.figure()

#  # 向这个figure添加一个3D子图
ax= fig.add_subplot(111, projection='3d')
# 希腊字母θ ,linear space  线性间隔即等差数列
theta =np.linspace(-4 * np.pi, 4 * np.pi, 100)
z=np.linspace(-4,4,100)*0.3
r = z ** 3 + 1
x = r * np.sin(theta)
y = r * np. cos(theta)
# 在建立好的坐标系即轴上根据x,y,z 的值画出该曲线
ax.plot(x,y,z, label= 'parametric curve' )
# 标注图例
ax.legend()
# 绘图
plt. show()
  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值