14.1绘制3D散点图

14.1.1图像呈现

Python绘图-14绘制3D图(上)-LMLPHP

14.1.2绘图代码

import numpy as np  # 导入numpy库,numpy是Python的一个强大的数值计算扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
import matplotlib.pyplot as plt  # 导入matplotlib的绘图模块pyplot,matplotlib是Python的一个绘图库,pyplot是其中的一个子模块,提供了MATLAB类似的绘图API。
from matplotlib import rcParams  # 从matplotlib库中导入rcParams模块,rcParams是一个字典对象,用于处理与matplotlib相关的各种配置参数。
# 定义一个字典config,其中包含字体、大小和其他相关的配置参数
config = {"font.family": 'serif', "font.size": 10.5, "mathtext.fontset": 'stix', "font.serif": ['SimSun']}
# 使用config字典中的配置参数更新rcParams,从而修改matplotlib的默认配置
rcParams.update(config)
# 修正matplotlib配置,使得在显示负号时不会出现问题
plt.rcParams['axes.unicode_minus'] = False
# 设置数据点的数量
N = 250
# 设置随机数种子,使得每次生成的随机数序列相同
np.random.seed(124)
# 生成一个包含N个随机数的数组,范围在0到1之间,然后乘以15
x = 15 * np.random.random(N)
# 生成y值,它是x的正弦值加上一个小的随机扰动
y = np.sin(x) + 0.25 * np.random.random(N)
# 生成z值,它是x的余弦值加上一个小的随机扰动
z = np.cos(x) + 0.25 * np.random.random(N)
# 创建一个新的图形窗口,并设置其大小和分辨率
plt.figure(figsize=(6, 6), dpi=110)
# 创建一个3D坐标轴的子图
ax = plt.axes(projection='3d')
# 在3D坐标轴上绘制散点图,散点的坐标为(x, y, z),颜色为红色
ax.scatter3D(x, y, z, color='r')
# 设置x轴的标签、字体大小和标签与轴之间的距离
ax.set_xlabel('x', fontsize=20, labelpad=20)
# 设置y轴的标签、字体大小和标签与轴之间的距离
ax.set_ylabel('y', fontsize=20, labelpad=20)
# 设置z轴的标签、字体大小和标签与轴之间的距离
ax.set_zlabel('z', fontsize=20, labelpad=20)

# 显示图形窗口
plt.show()

14.2设置3D散点图长宽比

14.2.1图像呈现

Python绘图-14绘制3D图(上)-LMLPHP

14.2.2绘图代码

import numpy as np  # 导入numpy库,numpy是Python中用于数值计算的一个扩展程序库,常用于处理大型多维数组和矩阵运算。  
import matplotlib.pyplot as plt  # 导入matplotlib的绘图模块pyplot,用于生成各种静态、动态、交互式的可视化图形。
from matplotlib import rcParams  # 从matplotlib库中导入rcParams,rcParams是一个字典对象,用于处理matplotlib的默认配置参数。
# 定义一个字典config,其中包含字体、大小和其他相关的配置参数
config = {
    "font.family": 'serif',  # 设置字体族为衬线字体
    "font.size": 10.5,  # 设置字体大小为10.5
    "mathtext.fontset": 'stix',  # 设置数学文本的字体集为'stix'
    "font.serif": ['SimSun']  # 设置衬线字体为'SimSun'(即宋体)
}
rcParams.update(config)  # 使用config字典中的配置参数更新rcParams,从而修改matplotlib的默认配置
plt.rcParams['axes.unicode_minus'] = False  # 设置matplotlib配置参数,使得在显示负号时不会出现问题,确保负号正常显示
N = 250  # 设置数据点的数量为250
np.random.seed(124)  # 设置随机数种子为124,以确保每次生成的随机数序列相同,方便结果复现
x = 15 * np.random.random(N)  # 生成一个包含N个元素的数组,数组中的元素是0到1之间的随机数,然后乘以15
y = np.sin(x) + 0.25 * np.random.random(N)  # 计算y值,它是x的正弦值加上一个小的随机扰动
z = np.cos(x) + 0.25 * np.random.random(N)  # 计算z值,它是x的余弦值加上一个小的随机扰动
plt.figure(figsize=(6, 6), dpi=110)  # 创建一个新的图形窗口,设置其大小为6x6英寸,分辨率为110像素/英寸
ax = plt.axes(projection='3d')  # 创建一个3D坐标轴的子图,用于绘制3D图形
ax.scatter3D(x, y, z, color='r')  # 在3D坐标轴上绘制散点图,散点的坐标为(x, y, z),颜色为红色
ax.set_xlabel('x', fontsize=20, labelpad=20)  # 设置x轴的标签为'x',字体大小为20,标签与轴之间的距离为20
ax.set_ylabel('y', fontsize=20, labelpad=20)  # 设置y轴的标签为'y',字体大小为20,标签与轴之间的距离为20
ax.set_zlabel('z', fontsize=20, labelpad=20)  # 设置z轴的标签为'z',字体大小为20,标签与轴之间的距离为20
ax.set_box_aspect((2., 1.5, 1.2))  # 设置3D坐标轴的长宽比,这里的比例分别对应x、y、z轴
plt.show()  # 显示图形窗口

14.3绘制3D折线图

14.3.1图像呈现

Python绘图-14绘制3D图(上)-LMLPHP

14.3.2绘图代码

import numpy as np  # 导入numpy库,numpy是一个用于处理数组和进行数值计算的强大Python库。
import matplotlib.pyplot as plt  # 导入matplotlib的pyplot模块,用于绘制二维和三维图形。
from matplotlib import rcParams  # 从matplotlib库中导入rcParams,它用于自定义图形的各种属性。  
# 定义一个字典config,该字典包含用于设置图形字体、大小和其他相关配置参数的键值对。
config = {
    "font.family": 'serif',  # 设置字体族为衬线字体。
    "font.size": 10.5,  # 设置字体大小为10.5。
    "mathtext.fontset": 'stix',  # 设置数学文本的字体集为'stix'。
    "font.serif": ['SimSun']  # 设置衬线字体为'SimSun'(即宋体)。
}

rcParams.update(config)  # 使用config字典中的配置参数更新matplotlib的全局配置参数rcParams。
plt.rcParams['axes.unicode_minus'] = False  # 设置配置参数,确保在图形中正常显示负号。

N =100  # 设定数据点的数量为100。
np.random.seed(124)  # 设置随机数种子为124,以确保每次生成的随机数序列相同。
# 使用linspace函数生成一个包含N个元素的数组,这些元素在0到15之间均匀分布,用于表示x轴的坐标。
xline = np.linspace(0, 15, N)
# 计算yline,它是xline中每个元素的正弦值。
yline = np.sin(xline)
# 计算zline,它是xline中每个元素的余弦值。
zline = np.cos(xline)
# 创建一个新的图形窗口,并设置其大小为9x6英寸,分辨率为110像素/英寸。
fig = plt.figure(figsize=(9, 6), dpi=110)
# 创建一个3D坐标轴的子图,用于绘制3D图形。
ax = plt.axes(projection='3d')
# 在3D坐标轴上绘制由xline、yline和zline指定的折线图。
ax.plot3D(xline, yline, zline)
# 设置x轴的标签。
ax.set_xlabel('x')
# 设置y轴的标签。
ax.set_ylabel('y')
# 设置z轴的标签。
ax.set_zlabel('z')
# 设置3D坐标轴的长宽比,以更好地展示图形的形状。
ax.set_box_aspect((2, 1.5, 1.2))
# 显示图形窗口。
plt.show()

14.4设置3D图视角

14.4.1图像呈现

Python绘图-14绘制3D图(上)-LMLPHP

14.4.2绘图代码

import numpy as np  # 导入numpy库,用于处理数组和数值计算
import matplotlib.pyplot as plt  # 导入matplotlib的绘图模块,用于可视化
from matplotlib import rcParams  # 从matplotlib中导入rcParams,它用于处理matplotlib的配置参数
# 定义一个字典config,其中包含字体、大小和其他相关的配置参数
config = {"font.family": 'serif', "font.size": 10.5, "mathtext.fontset": 'stix', "font.serif": ['SimSun']}
rcParams.update(config)  # 使用config字典中的配置参数更新rcParams
plt.rcParams['axes.unicode_minus'] = False  # 运行配置参数总的轴(axes)正常显示正负号(minus)
N = 250
np.random.seed(124)
x = 15 * np.random.random(N)
y = np.sin(x) + 0.25 * np.random.random(N)
z = np.cos(x) + 0.25 * np.random.random(N)
plt.figure(figsize=(6, 6), dpi=110)
ax = plt.axes(projection='3d')
ax.scatter3D(x, y, z, color='r')
ax.set_xlabel('x', fontsize=20, labelpad=20)
ax.set_ylabel('y', fontsize=20, labelpad=20)
ax.set_zlabel('z', fontsize=20, labelpad=20)
ax.set_box_aspect((2., 1.5, 1.2))
ax.view_init(10, 180) #设置3D图角度,10是仰角,180是方位角
plt.show()

14.5绘制3D三角形曲面图

14.5.1图像呈现

Python绘图-14绘制3D图(上)-LMLPHP

14.5.2绘图代码

import numpy as np  # 导入numpy库,numpy是一个用于处理数组和进行数值计算的强大Python库。
import matplotlib.pyplot as plt  # 导入matplotlib的绘图模块pyplot,用于绘制二维和三维图形。
from matplotlib import rcParams  # 从matplotlib库中导入rcParams,它用于自定义图形的各种属性。
# 定义一个字典config,该字典包含用于设置图形字体、大小和其他相关配置参数的键值对。
config = {
    "font.family": 'serif',  # 设置字体族为衬线字体。
    "font.size": 10.5,  # 设置字体大小为10.5。
    "mathtext.fontset": 'stix',  # 设置数学文本的字体集为'stix'。
    "font.serif": ['SimSun']  # 设置衬线字体为'SimSun'(即宋体)。
}
rcParams.update(config)  # 使用config字典中的配置参数更新matplotlib的全局配置参数rcParams。
# 设置配置参数,确保在图形中正常显示负号。
plt.rcParams['axes.unicode_minus'] = False
# 定义数据点的数量
N = 2000
# 设置随机数种子,确保每次生成的随机数序列相同
np.random.seed(124)
# 生成N个0到1之间的随机数,并乘以2π,用于生成极径r
r = 2 * np.pi * np.random.random(N)
# 生成N个0到1之间的随机数,并乘以20π,用于生成角度theta
theta = 20 * np.pi * np.random.random(N)
# 利用极坐标到直角坐标的转换公式计算x和y的坐标
xdata = np.ravel(r * np.sin(theta))
ydata = np.ravel(r * np.cos(theta))
# 根据xdata和ydata计算zdata的值
zdata = np.sin(xdata) + np.cos(ydata)
# 创建一个新的图形窗口,并设置其大小为15x6英寸,分辨率为110像素/英寸
fig = plt.figure(figsize=(15, 6), dpi=110)
# 调整子图之间的空白
plt.subplots_adjust(wspace=0)
# 创建一个3D坐标轴的子图,位置为1行2列中的第1个位置
ax1 = plt.subplot(121, projection='3d')
# 使用plot_trisurf方法绘制3D曲面,并使用'inferno'颜色映射
ax1.plot_trisurf(xdata, ydata, zdata, cmap='inferno')
# 设置x轴的标签
ax1.set_xlabel('x')
# 设置y轴的标签
ax1.set_ylabel('y')
# 设置z轴的标签
ax1.set_zlabel('z')
# 设置3D视角,其中Elevation为40°,Azimuth为100°
ax1.view_init(40, 100)
# 设置3D坐标轴的长宽比
ax1.set_box_aspect((4.5, 4.5, 1.5))
# 设置子图的标题
ax1.set_title('Elevation = 40°, Azimuth = 100°')
# 创建另一个3D坐标轴的子图,位置为1行2列中的第2个位置
ax2 = plt.subplot(122, projection='3d')
# 使用plot_trisurf方法绘制另一个3D曲面,并使用相同的颜色映射
ax2.plot_trisurf(xdata, ydata, zdata, cmap='inferno')
# 设置x轴的标签
ax2.set_xlabel('x')
# 设置y轴的标签
ax2.set_ylabel('y')
# 设置z轴的标签
ax2.set_zlabel('z')
# 设置3D视角,其中Elevation为20°,Azimuth为100°
ax2.view_init(20, 100)
# 设置3D坐标轴的长宽比
ax2.set_box_aspect((4.5, 4.5, 1.5))
# 设置子图的标题
ax2.set_title('Elevation = 20°, Azimuth = 100°')
# 显示图形窗口
plt.show()

14.6绘制3D等高线图

14.6.1图像呈现

Python绘图-14绘制3D图(上)-LMLPHP

14.6.2绘图代码

import numpy as np  # 导入numpy库,numpy是Python的一个强大的数值计算扩展程序库,支持大量的维度数组与矩阵运算。
import matplotlib.pyplot as plt  # 导入matplotlib的绘图模块pyplot,用于绘制二维和三维图形。
from matplotlib import rcParams  # 从matplotlib库中导入rcParams,rcParams是一个字典对象,用于处理matplotlib的全局配置参数。
# 定义一个字典config,该字典包含字体、大小和其他相关的配置参数,用于自定义图形的显示样式。
config = {
    "font.family": 'serif',  # 设置字体族为衬线字体。
    "font.size": 15,  # 设置字体大小为15。
    "mathtext.fontset": 'stix',  # 设置数学文本的字体集为'stix'。
    "font.serif": ['SimSun']  # 设置衬线字体为'SimSun'(即宋体)。
}
rcParams.update(config)  # 使用config字典中的配置参数更新matplotlib的全局配置参数rcParams。
plt.rcParams['axes.unicode_minus'] = False  # 设置配置参数,确保在图形中正常显示负号。
N = 100  # 定义数据点的数量,这里用于生成X、Y坐标和对应的Z值。
np.random.seed(3124)  # 设置随机数种子,确保每次生成的随机数序列相同,方便结果复现。
# 生成N个在-2到2之间均匀分布的数,然后加上随机噪声,生成x和y的坐标值。
x = np.linspace(-2, 2, N) + np.random.random(N)
y = np.linspace(-2, 2, N) + np.random.random(N)
# 使用meshgrid函数根据x和y坐标生成网格化的X和Y坐标矩阵。
X, Y = np.meshgrid(x, y)
# 根据X和Y坐标矩阵计算对应的Z值,这里Z是X的正弦值和Y的余弦值的和。
Z = np.sin(X) + np.cos(Y)
# 创建一个新的图形窗口,并设置其大小为9x6英寸,分辨率为110像素/英寸。
fig = plt.figure(figsize=(9, 6), dpi=110)
# 创建一个3D坐标轴的子图。
ax = plt.axes(projection='3d')
# 使用contour3D方法绘制等高线图,cmap='Spectral'表示使用Spectral颜色映射。
ax.contour3D(X, Y, Z, cmap='Spectral')
# 设置x轴的标签。
ax.set_xlabel('x')
# 设置y轴的标签。
ax.set_ylabel('y')
# 设置z轴的标签。
ax.set_zlabel('z')
# 设置3D坐标轴的长宽比。
ax.set_box_aspect((2, 2, 1))
# 设置3D视角,其中Elevation为60°,Azimuth为100°。
ax.view_init(60, 100)
# 设置子图的标题。
ax.set_title('Contour counts = Default, elevation = 60, azimuth = 100')
# 显示图形窗口。
plt.show()
03-12 07:50