学习目标:
提示:这里可以添加学习目标
例如:
- matplotlib模块
学习内容:
1.创建画布和坐标轴
1.1创建
(1)plt.figure
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(10, 10))**#画布对象**
ax = fig.add_subplot(111, projection='3d')#创建三维坐标轴对象
(2)plt.subplots:
plt.subplots() 方法的参数可以控制创建的图形的行数和列数,以及可选的共享轴属性。在你的例子中,2 是指创建两行,1 是指创建一列,所以你得到了一个有两个子图的图形。
#plt.subplots() 是 Matplotlib 库中用于创建 Figure 对象和一个或多个 Axes 对象的函数。
fig, ax = plt.subplots(2, 1)
1.2坐标轴设置
#坐标轴范围设置
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)
ax.set_zlim(0,1)
#自定义间距的坐标轴设置
ax.set_xticks(range(0, num_cols + 1, 1))
#这将在 x 轴上设置从 0 到 num_cols 的刻度,间隔为 1。
1.3坐标轴整体设置:
plt.rcParams["font.sans-serif"] = ["SimHei"] # 设置字体为黑体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题
plt.rcParams['font.size'] = 9 # 设置字号为9pt
2.图示,图注
ax.set_title('6x6x6 Unit Grid with Nodes')#图片加入标题
3.画图
3.1ax.plot() 方法用于在 Matplotlib 中绘制线条或曲线。其基本语法为:
ax.plot(x, y, z, **kwargs)
x、y、z 分别是待绘制线条的 x、y、z 坐标值。这些值可以是列表、数组或者其他可迭代对象。
**kwargs 是一系列可选参数,用于指定线条的样式、颜色、标记等属性。
**kwargs参数:
color: 线条的颜色(如 'blue' 或 '#FF0000')。
linestyle: 线条的样式,如实线 '-'、虚线 '--'、点划线 '-.' 等。
linewidth: 线条的宽度。
marker: 点的标记类型,用于标记线条上的数据点,如 'o' 表示圆形标记、'^' 表示三角形标记等。
markersize: 标记的大小。
示例一--------绘制三维网格线
for i in range(num_cols + 1):
for j in range(num_rows + 1):
ax.plot([i, i], [j, j], [0, num_layers], color='gray', linestyle='--', linewidth=0.5)
for k in range(num_layers + 1):
ax.plot([i, i], [0, num_rows], [k, k], color='gray', linestyle='--', linewidth=0.5)
for j in range(num_rows + 1):
for k in range(num_layers + 1):
ax.plot([0, num_cols], [j, j], [k, k], color='gray', linestyle='--', linewidth=0.5)
3.2ax.scatter() 方法用于在 Matplotlib 中绘制散点图,即在图形上绘制一系列离散的点。其基本语法为:
ax.scatter(x, y, z=None, **kwargs)
x、y、z 分别是点的 x、y、z 坐标值。这些值可以是列表、数组或者其他可迭代对象。当绘制二维散点图时,只需要提供 x 和 y 坐标值;当绘制三维散点图时,还需要提供 z 坐标值。
**kwargs 是一系列可选参数,用于指定散点的样式、颜色、大小等属性。
**kwargs参数:
color: 散点的颜色(如 'blue' 或 '#FF0000')。
marker: 散点的标记类型,如 'o' 表示圆形、'^' 表示三角形等。
s: 散点的大小,用于控制点的直径或面积。
ax.scatter() 方法可以用于绘制二维散点图或三维散点图,具体取决于提供的坐标值。
示例二--------三维散点图
for node_pos in node_positions:
ax.scatter(node_pos[0], node_pos[1], node_pos[2], marker='o', s=50, color='blue')
# 绘制源点
ax.scatter(source_node[0], source_node[1], source_node[2], marker='*', s=100, color='red')
# 绘制直线连接源点与其相邻的节点
for node_pos in node_positions:
if node_pos != source_node:
if abs(node_pos[0] - source_node[0]) <= 1 and abs(node_pos[1] - source_node[1]) <= 1 and abs(node_pos[2] - source_node[2]) <= 1:
if node_pos not in [(source_node[0], source_node[1], source_node[2])]:
ax.plot([source_node[0], node_pos[0]], [source_node[1], node_pos[1]], [source_node[2], node_pos[2]], color='black')
#绘制点对点线条时
#x=[source_node[0], node_pos[0]],
#y=[source_node[1], node_pos[1]],
#z=[source_node[2], node_pos[2]],
示例三----------条例图示
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
scatter = ax.scatter(x, y, z, c=model.flatten(), cmap='viridis')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Depth')
# 添加速度条图例
cbar = fig.colorbar(scatter, ax=ax, orientation='vertical')
cbar.set_label('Velocity')
plt.title('3D Layered Velocity Model')
plt.show()
3.3文本注释
ax.text() 方法用于在 Matplotlib 图形中添加文本注释。其基本语法为:
ax.text(x, y, z, s, **kwargs)
x、y、z 是文本注释的位置,分别表示文本注释的 x、y、z 坐标值。当绘制二维图形时,只需要提供 x 和 y 坐标值;当绘制三维图形时,需要同时提供 x、y 和 z 坐标值。
s 是要添加的文本内容,可以是字符串。
**kwargs 是一系列可选参数,用于指定文本的样式、颜色、字体大小等属性。
**kwargs
fontsize: 文本的字体大小。
color: 文本的颜色。
实例四--------在点上加值
3.4 网格线
(1)plt.axhline(y=i, color='gray', linestyle='--', linewidth=0.5)
是 Matplotlib 中用于在图形中添加水平线的方法。这个方法会在指定的 y 坐标处添加一条水平线。
(2)plt.grid(True) 是 Matplotlib 中用于在图形中添加网格线的方法。
(3)plt.gca().set_aspect('equal', adjustable='box')
是 Matplotlib 中用于设置坐标轴纵横比的方法。
plt.gca() 获取当前 Axes 对象,即获取当前图形中的坐标轴对象。
set_aspect('equal', adjustable='box') 将坐标轴的纵横比设置为相等,同时通过 adjustable='box' 参数告诉 Matplotlib 在调整图形大小时保持纵横比不变。