如何从ASCII文件中绘制波长与通量

时间:2014-07-14 18:39:25

标签: python matplotlib plot ascii spectrum

所以我试图从本地ASCII文件中绘制一个星的光谱(我程序中的下面的路径是实际的路径,我只是在这里放了一个假的),但是我得到了一个元组错误。 我可能会说,我对Python很陌生。

import numpy as np
import astrotools as at
from matplotlib import pyplot as plt
import pyfits 
from astropy.io import fits


def pfit():
    f2 = open('/Users/myname/filepathtoASCIIfile', 'r') 
    lines = f2.readlines()
    f2.close()

    w = []
    f = []

    for line in lines:
        if not line.startswith('#'):
            # if line.endswith('e-16') or line.endswith('e-15'):
            #     line = line[:-4]
            p = line.split()
            if not p[0].startswith('#'):
                try:
                    w.append(float(p[0]))
                    f.append(float(p[1]))
                except IndexError:
                    pass

    W = np.array(w)
    F = np.array(f)
    #return (W, F)

    plt.plot(W, F)
    plt.show()

我在运行Python时遇到的错误是:

     33 
---> 34     plt.plot(W, F)
     35     plt.show()
     36 

TypeError:'tuple'对象不可调用

1 个答案:

答案 0 :(得分:1)

现在可能是错误在其他地方。您的代码似乎没有任何严重错误,如果您能够创建数组WF,那么您的数据就可以了。

该错误暗示plt.plot发生了悲伤事件。你可能会在某处说一句话:

plt.plot = ...
例如,你在某个时候写过:

plt.plot = (W,F)

这已经通过元组覆盖原始的plt.plot函数。现在你试着调用那个元组,它不起作用。

要验证是否是这种情况,请在绘图命令之前添加一行:

print plt.plot

结果应该是这样的:

<function plot at 0x10203040>

如果不是,您已经杀死了plot命令。

(顺便说一句,感谢您显示代码和实际的错误消息!欢迎来到SO!)