【问题标题】:having problems with matplotlib and spectroscopy datamatplotlib 和光谱数据有问题
【发布时间】:2017-03-26 07:33:51
【问题描述】:

我正在尝试使用此代码从恒星目录中绘制 .dat 文件

    try:
    import pyfits
    noPyfits=False
except:
    noPyfits=True

import matplotlib.pyplot as plt
import numpy as np


f2 = open('/home/mcditoos/Desktop/Astrophysics_programs/Data_LAFT/ESPECTROS/165401.dat', 'r')

lines = f2.readlines()
f2.close()
x1 = []
y1 = []


for line in lines:
    p = line.split()
    x1.append(float(p[0]))
    y1.append(float(p[1]))

xv = np.array(x1)
yv = np.array(y1)



plt.plot(xv, yv)

plt.show()

但是我得到以下错误:

x1.append(float(p[0]))

IndexError: list index out of range

我也想知道是否有办法让它成为一个能够在给定输入的情况下打开下一个 .dat 文件的程序

【问题讨论】:

  • 打印前试过检查p的长度吗?
  • 我做了,是 2
  • 当数组长度为 2 时,它不可能在索引 0 处给出 IndexError。这是在调用 x1.append(float(p[0])) 之前使用 print(len(p))
  • 好像可以,我刚刚上传了图片,我只是使用np.loadtxt()工具解决了问题
  • 控制台中的每一个数字都是2?因为即使其中一个小于 2 也会导致 IndexError 所以尝试for line in lines: p = line.split() if (len(p) > 1): x1.append(float(p[0])) y1.append(float(p[1]))

标签: python matplotlib astronomy


【解决方案1】:

我可能不完全理解你的问题,但你为什么不使用

X, Y = numpy.genfromtxt('yourfile', dtype='str')
X = X.astype('float')
Y = Y.astype('float')

如果在您的文件中有 2 列,您可以转置表格

X, Y = numpy.genfromtxt('yourfile', dtype='str').T

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2019-12-12
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    相关资源
    最近更新 更多