2017-10-31 11 views
0

私は約2週間は答えを探しましたが、何か助けを見つけることができません。基本的には、CSVファイルから値(正確には2列)を読み込もうとしています。ここに例があります:csvファイルからMatplotlibのaitoff投影に値を自動的に読み込む方法はありますか?

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

あなたのcsvファイルの外観を表示できますか? – DavidG

+0

210.0079259734、-52.3214149846、-99999、0,10,0.62,0.45,11.53,85、-2.449,0.497、-8.341,1.28,6089270560571566592,5.058319010332389E-4,14000190-5219171,11.066,10.993,10.944,0.022 、0.021,0.021、AAA、J140001.90-521917.0,10.89,10.916,10.842,9.355,0.023,0.022,0.084,0.483,0000,0、AAAC、11.961,11.736,210.0079097665295、-52.32140478043333 これは、ライン。さらに何千もある。 – roaldxd

+1

常に問題の[mcve]を作成してください。 [ask]も読んでください。ここでは、データをプロットすることは重要ではありません。問題はgenfromtxt行から発生します。したがって、あなたは他のすべてを出すことができます。 **しかし**、エラーは一部のデータの読み込みに依存するため、最小限のデータセットを提供する必要があります。 – ImportanceOfBeingErnest

答えて

-1

私が理解によると、plt.plotは2つの必須の引数を取る(x, y) x軸とy軸でデータを表します。 xおよびyは、値のリスト(floatまたはint)で、同じ長さです。だからあなたのコードのplt.plot(my_data, 'o', markersize=2, alpha=1)が間違っていると思います。 mydataはn-times-n行列です。したがって、matpltolibはデータが3次元以上であればプロットできないと言っていますか?

+0

いいえ、matplotlibは任意の 'n' x' m'配列をプロットできます。最初の 'n '個の整数を' x'とし、 'm'個の異なる行をプロットします。試してみてください: 'plt.plot(numpy.random.rand(10,3))'。 – ImportanceOfBeingErnest

+0

はい!明らかに私は間違っています!それほど役に立たないことを申し訳ありません! –

+0

あなたが提供した回答が助けにならない、または問題に対処していないことが判明した場合は、もちろんそれを編集して質問に答えるか、まったく削除することができます。 – ImportanceOfBeingErnest

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() 
関連する問題