gpt4 book ai didi

python - 将多条图形线平均为一条,python和matplotlib

转载 作者:行者123 更新时间:2023-12-04 19:08:41 26 4
gpt4 key购买 nike

我是编码新手,请温柔!
我有一个主脚本,可以模拟在微重力条件下相互碰撞的粒子和墙壁。这部分脚本输出包含:timestep、vtotal 的各个数据文件。有 15 个粒子,所以我得到 15 个 txt 文件。

N_max = sim.getNumTimeSteps()
particleData = [ [] for x in range(len(sim.getParticleList()))]
for n in range (N_max):
sim.runTimeStep()
if (n%1000==0):
particles = sim.getParticleList()
for i in range(len(sim.getParticleList())):
print i
x, y, z = particles[i].getVelocity()
particleData[i].append( (n, x, y, z ))
print len(sim.getParticleList())

for i in range(len(sim.getParticleList())):
with open("{0:d}.dat".format(i), "w") as f:
for j in particleData[i]:
f.write("%f,%f \n" % (j[0], (math.sqrt(float(j[1])**2+float(j[2])**2+float(j[3])**2)) ))
sim.exit()
我需要努力的最终结果是这 15 个粒子随时间变化的平均值。例如,在这个模拟中,它运行了 22000 个时间步,增量为 1000。如果我错了,请纠正我,但平均值应该是 (vtotal1+vtotal2+vtotal3+...vtotal15)/每个增量。当它随时间绘制时,一条线代表模拟中 15 个粒子的平均速度?这是我正在做的一个版本,它改编自另一个平均尝试。
import matplotlib
matplotlib.use('agg')
import matplotlib.pyplot as plt
import csv
import math
import numpy as np

x = []
y = []
y_mean = np.array([1 for _ in range(22000/1000)])
fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(10, 7))
for i in range(15):
x = []
y = []
with open("{}.dat".format(i),'r') as csvfile:
plots = csv.reader(csvfile, delimiter=',')
for row in plots:
x.append(float(row[0]))
y.append(float(row[1]))
y_mean[int(float(row[0]) / 1000)] += y[-1]
axes.plot(x,y, color='skyblue', label="Total v {}".format(i+1))
axes.plot(x,y_mean, color='olive', label="Average v {}".format(i+1))
plt.title('Particles Over Time')
plt.xlabel('Timestep Number')
plt.grid(alpha=.5,linestyle='--')
plt.ylabel('Velocity')
plt.xlim(0, 2000)
plt.show()
plt.autoscale(enable=True, axis=y, tight=True)
plt.legend()
plt.savefig("round2avgs.png")
y_mean = np.asarray(y) / 15
我只是不知道出了什么问题。任何帮助表示赞赏。

最佳答案

通常,您应该将数据处理和可视化分为两个不同的步骤。
假设您有 5 个 CSV,都具有相同的数据:

0,1
1000,2
2000,3
3000,4
4000,5
我们将其命名为 1.dat、2.dat ... 3.dat。
  • 导入库并加载数据

  • import csv

    import matplotlib.pyplot as plt
    import numpy as np

    x = []
    ys = []
    for i in range(5):
    with open(f'{i+1}.dat') as data_file:
    data = csv.reader(data_file, delimiter=',')
    y = []
    for row in data:
    if i == 0:
    x.append(float(row[0]))
    y.append(float(row[1]))
    ys.append(y)
  • 使用 numpy
  • 计算每个时间步的平均值

    means_per_timestep = np.array(ys).mean(axis=0)
  • 绘制
  • plt.plot(x, means_per_timestep)
    这是你所期待的吗?
    Plot

    关于python - 将多条图形线平均为一条,python和matplotlib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62566495/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com