我正在学习Specutils,并且在程序的连续拟合部分遇到了问题。程序返回“ UnitsConversionError”。
我在Spyder 3.3.3中使用Python 3.7。当我使用run命令时,程序返回上面给出的错误。如果我在Spyder控制台中使用相同的代码行,则该代码将返回一个空图。
from specutils import Spectrum1D
lamb = 10**specdata['loglam']*u.AA
flux = specdata['flux']*10**-17*u.Unit('erg cm-2 s-1 AA-1')
spec = Spectrum 1D(spectral_axis=lamb, flux=flux)
lines = plt.step(spec.spectral_axis, spec.flux)
from specutils.fitting import fit_generic_continuum
cont_norm_spec = spec/fit_generic_continuum(spec)(spec.spectral_axis)
lines = plt.step(cont_norm_spec.wavelength, cont_norm_spec.flux)
plt.xlim(654*u.nm, 660*u.nm)
结果应该是两个图。首先是整个频谱。 (不包括加载的文件。)第二个应该是该图的一个小节。第二个图不显示。而是返回“ UnitsConversionError”。如果我在控制台中运行“ lines = ...”并在下面运行,则会返回一个空窗口。
答案 0 :(得分:1)
这里:
lamb = 10**specdata['loglam']*u.AA
您正在将波长转换为埃。
但是这里:
plt.xlim(654*u.nm, 660*u.nm)
您要求它以纳米为单位绘制。尝试给它:
plt.xlim(6540*u.AA, 6600*u.AA)
除非有其他问题,否则此更改应该可以解决。换句话说,它需要一致的单位。