整体思路
首先,我们需要从 PFC2D 模拟结果中提取应力数据,然后利用 Python 的绘图库(比如 matplotlib)将这些数据绘制成云图。
代码实现
import numpy as np
import matplotlib.pyplot as plt
# 假设从 PFC2D 模拟结果文件中读取到应力数据
# 这里用随机数据代替实际读取的数据
num_points = 100
x = np.random.rand(num_points)
y = np.random.rand(num_points)
stress = np.random.rand(num_points)
# 创建图形和坐标轴
fig, ax = plt.subplots()
# 绘制应力云图
sc = ax.scatter(x, y, c=stress, cmap='viridis')
# 添加颜色条
cbar = fig.colorbar(sc, ax=ax)
cbar.set_label('Stress Value')
# 设置图形标题和坐标轴标签
ax.set_title('Stress Contour Map in PFC2D')
ax.set_xlabel('X - Coordinate')
ax.set_ylabel('Y - Coordinate')
# 显示图形
plt.show()
代码分析
- 数据准备:开始部分导入了
numpy和matplotlib.pyplot库,numpy用于数值计算,matplotlib.pyplot则负责绘图。在实际应用中,我们需要从 PFC2D 的输出文件(比如文本文件记录每个颗粒的应力等信息)中读取数据。这里为了演示方便,使用np.random.rand生成了一些随机数据来模拟从 PFC2D 获取的坐标x、y和应力值stress。实际情况中,可能需要使用文件读取函数,例如np.loadtxt来读取特定格式的 PFC2D 输出文件。 - 创建图形和坐标轴:
fig, ax = plt.subplots()这行代码创建了一个图形对象fig和一个坐标轴对象ax。后续的绘图操作都将在这个坐标轴上进行。 - 绘制应力云图:
ax.scatter(x, y, c=stress, cmap='viridis')使用scatter函数绘制散点图,其中x和y是点的坐标,c参数指定用应力值stress来给点上色,cmap='viridis'选择了一种颜色映射方案,这里的viridis颜色映射会根据应力值的大小将点显示为不同的颜色,低值对应一种颜色,高值对应另一种颜色,从而直观地体现应力分布。 - 添加颜色条:
fig.colorbar(sc, ax=ax)创建一个颜色条对象cbar,它和之前绘制的散点图sc相关联,用于显示颜色和应力值之间的对应关系。 给颜色条添加了标签,让读者清楚知道颜色代表的物理量。



