如何从ASCII文件绘制波长与通量的关系图

1 投票
1 回答
580 浏览
提问于 2025-04-18 13:17

我正在尝试从一个本地的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 

类型错误:'tuple'对象不可调用

1 个回答

1

现在可能是其他地方出了问题。你的代码看起来没什么大问题,如果你能成功创建数组 WF,那么你的数据应该是没问题的。

错误提示表明 plt.plot 可能出了点状况。你可能在某个地方写了:

plt.plot = ...

比如,你在某个时刻写了:

plt.plot = (W,F)

这段代码把原来的 plt.plot 函数给覆盖成了一个元组。现在你尝试调用这个元组,但它不工作。

为了确认是不是这样,建议在你的绘图命令之前加一行:

print plt.plot

结果应该是类似这样的:

<function plot at 0x10203040>

如果不是,那说明你把 plot 命令给搞坏了。

(顺便说一下,感谢你分享代码和实际的错误信息!欢迎来到 Stack Overflow!)

撰写回答