我根据开普勒第三定律测量木星的质量。我拍摄了147张木星及其月球的图像,特别是木卫一。我编写了代码来从图像文件中获取位置矢量,这样我就可以计算出Io和Jupiter之间距离的大小(距离)。这将允许我绘制一段时间内的距离。即:plot(t,d)
下面的代码虽然不优雅,但实现这个奇妙。然而,我正在尝试将我的日期时间数组转换为可绘制的值。我有几个晚上的数据。该图将是正弦曲线,并且通过解释该曲线将导出Io轨道的周期。我已经包含了代码,然后是.txt格式的CSV文件:python3
import numpy as np
import matplotlib.pyplot as plt
import datetime
import matplotlib.dates as mdates
import math
# Declare arrays (lists) for (x,y) pixel position vectors from .fits
# image files.
jup_x = []
jup_y = []
io_x = []
io_y = []
cal_x = []
cal_y = []
gan_x = []
gan_y = []
eur_x = []
eur_y = []
date_and_time = []
readFile = open('raw_data1.txt','r')
sepFile = readFile.read().split('\n')
readFile.close()
for j_pos_pair in sepFile:
j_xandy = j_pos_pair.split(',')
jup_x.append(int(j_xandy[1]))
jup_y.append(int(j_xandy[2]))
print(jup_x)
print(jup_y)
for io_pos_pair in sepFile:
io_xandy = io_pos_pair.split(',')
io_x.append(int(io_xandy[3]))
io_y.append(int(io_xandy[4]))
print(io_x)
print(io_y)
for cal_pos_pair in sepFile:
cal_xandy = cal_pos_pair.split(',')
cal_x.append(int(cal_xandy[5]))
cal_y.append(int(cal_xandy[6]))
print(cal_x)
print(cal_y)
for gan_pos_pair in sepFile:
gan_xandy = gan_pos_pair.split(',')
gan_x.append(int(gan_xandy[7]))
gan_y.append(int(gan_xandy[8]))
print(gan_x)
print(gan_y)
for eur_pos_pair in sepFile:
eur_xandy = eur_pos_pair.split(',')
eur_x.append(int(eur_xandy[9]))
eur_y.append(int(eur_xandy[10]))
print(eur_x)
print(eur_y)
for date_time in sepFile:
d_and_t = date_time.split(',')
date_and_time.append(str(d_and_t[0]))
print(date_and_time)
# make into arrays for vector operations
# date_and_time = np.array(date_and_time)
datetime = np.array(date_and_time)
Jup_x = np.array(jup_x)
Jup_y = np.array(jup_y)
Io_x = np.array(io_x)
Io_y = np.array(io_y)
print(Jup_x)
print(Jup_y)
print(Io_x)
print(Io_y)
# vector subtraction (Position vector between Jupiter and Io)
J_Io_s_x = Jup_x - Io_x # reads: separation between Io and Jupiter x values
J_Io_s_y = Jup_y - Io_x # reads: separation between Io and Jupiter y values
print(J_Io_s_x)
print(J_Io_s_y)
M_s_J_Io = ((J_Io_s_x)**2 + (J_Io_s_y)**2)**0.5 # The magnitude of the separation
# between Jupiter and Io in pixels
print(M_s_J_Io)
from datetime import datetime
datetime.strptime("2015-feb-05 19:00", "%Y-%b-%d %H:%M")
x = np.array([datetime.datetime(2015, 2, 5, i, 0) for i in range(24)])
plot_M_s_J_Io = np.array(M_s_J_Io)
plt.plot(x,plot_M_s_J_Io)
plt.show()
CSV文件:(这是测试运行副本,实际列表更大)
2015-feb-05 20:11,1150,735,1335,647,307,1123,0000,000,965,818
上面的CSV文件也包含所有卫星的信息。对于我的测试,我把它限制在Jupiter和Io的信息上。这只是CSV文件中的前五个字段。它的索引是0-10。
任何建议,我知道我很接近,我只是不了解它的时间转换方面。完全披露:这是针对NMT的LAB,但是我已经在本报告中超越了,因为我使用python而不是手动执行此操作。所有帮助当然非常感谢。
杰西
答案 0 :(得分:0)
由于我没有您的文件,因此我只能假设您的数据处理工作正在进行中:
from datetime import datetime
但是从那时起,您的代码中会有一些奇怪的怪癖。
首先你的陈述datetime.strptime("2015-feb-05 19:00", "%Y-%b-%d %H:%M")
什么都不做。它运行,但不会将返回值分配给变量。所以摆脱它是安全的。
其次是在行:
x = np.array([datetime.datetime(2015, 2, 5, i, 0) for i in range(24)])
此行将起作用,因为您在脚本开头导入了datetime模块。但如果你没有这样做,你就会导致出现错误信息。由于您明确导出了日期时间模块的datetime
函数,因此我建议您使用它,为了简洁/清晰起见,而不是datetime.datetime
最后(也可能是唯一的实际错误)是要在pyplot中绘制时间序列,你必须使用pyplot.plot_dates
函数和不 pyplot.plot
函数。
答案 1 :(得分:0)
这就是运行和工作的原因,感谢输入人员:
from datetime import datetime
t = datetime.strptime("2015-feb-05 19:00", "%Y-%b-%d %H:%M")
for line in date_and_time:
t = datetime.strptime(line, "%Y-%b-%d %H:%M")
plot_time.append(t.timestamp())
plt.plot(plot_time,M_s_J_Io)
plt.show()