我最近刚开始在一个学校项目中使用Python,我正在尝试在使用不同基值计算的图中创建多条线。该模型计算卫星的轨道,图形以x轴表示时间(以秒为单位),y轴表示高度(以米为单位)。是否有可能从模型的第一次运行中保留行,或者我是否必须复制并粘贴它与新的数据标签?提前感谢您的帮助。
from typing import Any, Union
import matplotlib.pyplot as plt
import matplotlib.animation as ani
data = []
t = 0
dt = 10
A = 10
Cw = 2.7
h = 300000
h0 = h
G = 6.67384 * 10 ** -11
M = 5.972 * 10 ** 24
m = 209.4 * A ** (3 / 2)
r = 6371000 + h
v: Union[float, Any] = (G * M / r) ** .5
vx = v
vy = 0
Px = 0
Py = r
while 0 < h < h0 + 100000:
# for _ in range(2592000):
t = t + dt
r = (Px ** 2 + Py ** 2) ** .5
Fg = G * M * m / r ** 2
Fgx = -Fg * Px / r
Fgy = -Fg * Py / r
h = r - 6371000
if h > 600000:
z = 1.607 * 10 ** -11 * 0.991169 ** (h / 1000)
else:
if h > 139000:
z = 3.848 * 10 ** -8 * 0.978294 ** (h / 1000)
else:
z = 1.225 * 0.863697 ** (h / 1000)
v = (vx ** 2 + vy ** 2) ** .5
Fwl = 0.5 * z * Cw * A * v ** 2
Fwlx = -Fwl * vx / v
Fwly = -Fwl * vy / v
ax = (Fgx + Fwlx) / m
ay = (Fgy + Fwly) / m
vx = vx + ax * dt
vy = vy + ay * dt
Px = Px + vx * dt
Py = Py + vy * dt
data += [[t, h]]
fig, ax = plt.subplots()
ax.plot(*zip(*data))
ax.set_xlabel('Tijd (s)')
ax.set_ylabel('Hoogte (m)')
ax.set_title("Hoogte satelliet vanaf 300km")
plt.show()
当然可以。
一种可能的方法是将在data
中计算的数据保存在.csv
文件中。
处理.csv
文件最常用的方法之一是pandas
库。
所以你应该:
- 将
data
列表转换为numpy.array
data_to_save
- 将
data_to_save
的第一列保存为apandas.DataFrame
的'time'
列,data_to_save
的第二列作为同一数据帧df
的'height'
列 - 保存
df
数据帧到.csv
文件
工作代码
import pandas as pd
import numpy as np
# here you compute data
data_to_save = np.array(data)
df = pd.DataFrame({'time': data_to_save[:, 0],
'height': data_to_save[:, 1]})
df.to_csv('my_data.csv', index = False)
这将创建一个my_data.csv
,第一行是:
time,height
10.0,300000.0
20.0,299552.2454725085
30.0,299104.5811199909
40.0,298657.0670737019
50.0,298209.7634687573
60.0,297762.7304360224
70.0,297316.02809399646
80.0,296869.7165406905
在第二步中,您可以通过读取.csv
文件在python脚本中调用数据:
import pandas as pd
df = pd.read_csv('my_data.csv')
可以用df['time']
或df.time
访问'time'
值,用df['height']
或df.height
访问'height'
值。