我现在已经四周寻找答案了,我似乎找不到任何帮助。基本上我正试图从csv文件中读取值(确切地说是2列)。这是一个例子:
from astropy import units as u
from astropy.coordinates import SkyCoord
import matplotlib.pyplot as plt
import numpy as np
from numpy import genfromtxt
my_data = genfromtxt('TGAS_2MASS_ALLWISE_TYC2.csv', delimiter = ', ', usecols=['ra','dec'])
plt.figure(figsize=(8,4.2))
plt.subplot(111, projection="aitoff")
plt.title("Aitoff")
plt.grid(True)
plt.plot(my_data, 'o', markersize=2, alpha=1)
plt.subplots_adjust(top=1,bottom=0.0)
plt.show()
我尝试了许多不同的方法来完成这项工作,但我似乎找不到任何方法。这是它给我的错误:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-16-da402c9f65a8> in <module>()
4 import numpy as np
5 from numpy import genfromtxt
----> 6 my_data = genfromtxt('TGAS_2MASS_ALLWISE_TYC2.csv', usecols=['ra','dec'], delimiter = ',')
7 plt.figure(figsize=(8,4.2))
8 plt.subplot(111, projection="aitoff")
c:\python36\lib\site-packages\numpy\lib\npyio.py in genfromtxt(fname, dtype, comments, delimiter, skip_header, skip_footer, converters, missing_values, filling_values, usecols, names, excludelist, deletechars, replace_space, autostrip, case_sensitive, defaultfmt, unpack, usemask, loose, invalid_raise, max_rows)
1626 # if usecols is a list of names, convert to a list of indices
1627 if _is_string_like(current):
-> 1628 usecols[i] = names.index(current)
1629 elif current < 0:
1630 usecols[i] = current + len(first_values)
AttributeError: 'NoneType' object has no attribute 'index'
答案 0 :(得分:1)
一切都取决于csv文件的外观。但即使它有列名
ra, tum, dec, mor
1, 2, 3, 5
2, 4, 5, 3
2, 1, 4, 3
您仍然可以使用usecols=[0,2]
阅读它。文档说明:
usecols
:序列,可选
要读取哪些列,其中0为第一列。例如,usecols =(1,4,5)将提取第2列,第5列和第6列。
因此,您不能将字符串用作列,而是使用整数。
u = u"""ra, tum, dec, mor
1, 2, 3, 5
2, 4, 5, 3
2, 1, 4, 3"""
import io
import matplotlib.pyplot as plt
from numpy import genfromtxt
my_data = genfromtxt(io.StringIO(u), delimiter = ', ', usecols=[0,2])
plt.plot(my_data, 'o')
plt.show()
答案 1 :(得分:-1)
根据我的理解,plt.plot
将采用2个强制参数(x, y)
来表示x和y轴上的数据。 x
和y
这里是值列表(float或int),并且具有相同的长度。所以我认为代码中的plt.plot(my_data, 'o', markersize=2, alpha=1)
是错误的。你的mydata
是n次n矩阵,所以很多matpltolib试图说它不能绘图,因为数据是&gt; 3维?