2017-10-24 8 views
0

IDLEでmatplotlib.pyplotを使用してデータをプロットしようとしています。これは教室の外でmatplotlibを使うのを初めて試みたことです。IDLEを使用したPyPlot

私のコードはかなり単純です。CSVからデータフレームにデータをロードし、それを散布図に載せようとします。

Traceback (most recent call last): 
    File "C:/Users/dmccarville/Desktop/DJM Figures/plot.py", line 10, in <module> 
    plot_me = data.plot(x=data['Density'], y=data['Cost per Pupil'], kind='scatter') 
    File "C:\Python34\lib\site-packages\pandas\plotting\_core.py", line 2617, in __call__ 
    sort_columns=sort_columns, **kwds) 
    File "C:\Python34\lib\site-packages\pandas\plotting\_core.py", line 1859, in plot_frame 
    **kwds) 
    File "C:\Python34\lib\site-packages\pandas\plotting\_core.py", line 1684, in _plot 
    plot_obj.generate() 
    File "C:\Python34\lib\site-packages\pandas\plotting\_core.py", line 240, in generate 
    self._make_plot() 
    File "C:\Python34\lib\site-packages\pandas\plotting\_core.py", line 833, in _make_plot 
    scatter = ax.scatter(data[x].values, data[y].values, c=c_values, 
    File "C:\Python34\lib\site-packages\pandas\core\frame.py", line 1958, in __getitem__ 
    return self._getitem_array(key) 
    File "C:\Python34\lib\site-packages\pandas\core\frame.py", line 2002, in _getitem_array 
    indexer = self.loc._convert_to_indexer(key, axis=1) 
    File "C:\Python34\lib\site-packages\pandas\core\indexing.py", line 1168, in _convert_to_indexer 
    return labels.get_loc(obj) 
    File "C:\Python34\lib\site-packages\pandas\core\indexes\base.py", line 2442, in get_loc 
    return self._engine.get_loc(key) 
    File "pandas\_libs\index.pyx", line 132, in pandas._libs.index.IndexEngine.get_loc (pandas\_libs\index.c:5280) 
    File "pandas\_libs\index.pyx", line 134, in pandas._libs.index.IndexEngine.get_loc (pandas\_libs\index.c:4819) 
    File "C:\Python34\lib\site-packages\pandas\core\base.py", line 51, in __str__ 
    return self.__unicode__() 
    File "C:\Python34\lib\site-packages\pandas\core\series.py", line 982, in __unicode__ 
    width, height = get_terminal_size() 
    File "C:\Python34\lib\site-packages\pandas\io\formats\terminal.py", line 33, in get_terminal_size 
    return shutil.get_terminal_size() 
    File "C:\Python34\lib\shutil.py", line 1071, in get_terminal_size 
    size = os.get_terminal_size(sys.__stdout__.fileno()) 
AttributeError: 'NoneType' object has no attribute 'fileno' 

私はこれがIDLEで行うことができないことを示唆している、this bug reportを見つけることができました:

import matplotlib.pyplot as plt 
import pandas as pd 

filename = 'data.csv' 
data = pd.read_csv(filename, delimiter=',') 

plot_me = data.plot(x=data['Density'], y=data['Cost per Pupil'], kind='scatter') 

しかし、これは私は、次の問題を抱えています長いエラーを返します。初心者の何かとして、それは私に信じられないように聞こえる。

これは間違いありませんか? IDLEを使って散布図を作ることは本当にできませんか?できるなら、何をする必要がありますか?

+1

まず、エラーを再現できるように外部データに依存しないようにプログラムを単純化します。 [mcve]を参照してください。 – ImportanceOfBeingErnest

答えて

3

これはあなたの問題をデバッグするためのガイドです:

まず、あなたのプログラムを簡素化し、それはエラーが再現可能であることなどの外部データに依存しないように。 Minimal, Complete, and Verifiable exampleを参照してください。これは、次のようになります。

import matplotlib.pyplot as plt 
import pandas as pd 

data = pd.DataFrame({"x" : [1,2,3],"y":[3,2,4]}) 

plot_me = data.plot(x=data['x'], y=data['y'], kind='scatter') 

plt.show() 

は今これを実行すると、これは、プロットの作成ではなく、実際の上映に何か問題があることを示して

Traceback (most recent call last): 
    File "D:\Data\Computer\Entwicklung\python\SO_plot_dataframe.py", line 13, in <module> 
    plot_me = data.plot(x=data['x'], y=data['y'], kind='scatter') 

# and so on. 

、エラーが生成されます。

何がうまくいかないかを確認するには、(1)他の例や(2)the documentationを参照してください。ドキュメントから、引数xyは "ラベルまたは位置"でなければならず、データフレーム列自体ではないことがわかります。だから、

xyは、データフレームの列ラベルです
plot_me = data.plot(x='x', y='y', kind='scatter') 

plot_me = data.plot(x=data['x'], y=data['y'], kind='scatter') 

を変更

は、あなたの希望のプロットを与えます。

これはIDLEとは関係ありませんが、コマンドの1つで誤った構文が使用されています。

質問のIDLE一部について
0

:あなたはpython -m idlelib(またはpy -3.4 -m idlelib)とコマンドラインコンソール(WindowsのコマンドプロンプトやPowerShellの)からIDLE起動した場合、その後、sys.__stdout__がコンソールになると.fileno()呼び出しが成功すると戻ります1とos.get_terminal_size(1)コールは、コンソールウィンドウのサイズを返します。 PyplotはコンソールかIDLEシェルのいずれかに印刷します(私にはわからない)。

関連する問題