大家好,我是小马老师。
本文继续介绍使用python编程处理lammps模拟数据。
在前面文章已经介绍python绘制应力应变曲线的程序。
本文介绍python绘制rdf曲线的方法,并且是多条曲线绘制到一起。
演示案例为官方自带案例,水分子的rdf计算,rdf计算代码为:
compute gofr all rdf 100 1 1 2 2 1 2 # O-O, H-H, O-H
fix rdf all ave/time 100 10 1000 c_gofr[*] file rdf.dat mode vector
rdf计算结果保存在rdf.dat文件中,如下图所示:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CM3kjN5QTOhdjYmR2YyczMzYzXxMjM1EDMxAzLcBTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
计算了三组rdf,因此会得到8列数据,并且前4行数据为注释。
因此,绘图时从第5行开始分别提取第2、3、5、7列数据,第2列为公共x轴,3、5、7列分别为y轴。
结果如下图所示:
import matplotlib.pyplot as plt
#设置数组
x = []
rdf1 = []
rdf2 = []
rdf3 = []
#读取文件
filename = "rdf.dat"
f = open(filename,'r')
#读取前4行注释
for i in range(0,4):
line1 = f.readline()
#读取数据、提取数据存入数组
for line in f.readlines():
x.append(float(line.split()[1]))
rdf1.append(float(line.split()[2]))
rdf2.append(float(line.split()[4]))
rdf3.append(float(line.split()[6]))
f.close()
#绘图
plt.figure(figsize=(8,5))
plt.plot(x,rdf1,linewidth=1.5,marker='o',markersize=3,color='C2',label='O-O')
plt.plot(x,rdf2,linewidth=1.5,marker='o',markersize=3,color='C3',label='H-H')
plt.plot(x,rdf3,linewidth=1.5,marker='o',markersize=3,color='C5',label='O-H')
plt.xlabel('$r$/$\AA$')
plt.ylabel('$g(r)$')
plt.legend()
plt.show()