2016-04-03 16 views
2

私は単純なグラフをプロットできるようにするために.txtファイル内のデータを取り除いてみましたが、データを取得できないようです好き。誰かが正しい方向に私を導くことができますか?単純なグラフのpythonをtxtファイルからプロットする

以下は、テキストファイルのデータの簡単な例です。私は可能な場合はテキストファイル自体の見出しを使用してテキストファイルを.read()しようとしています。

私がこれまで試してみました、私のpythonコード
Date,Value 
2016-03-31,0.7927 
2016-03-30,0.7859  
2016-03-29,0.7843 
2016-03-24,0.7893  
2016-03-23,0.792  
2016-03-22,0.7897  
2016-03-21,0.7818  
2016-03-18,0.778  
2016-03-17,0.781  
2016-03-16,0.7855 
2016-03-15,0.7845 

:(私はまだそれをソートしていて、これは完璧なコードではありません!)

import numpy as np 
import matplotlib.pyplot as plt 


with open("EURGBP DATA.txt") as f: 
data = f.read() 

data = data.split('\n') 

x = [row.split()[0] for row in data] 
y = [row.split()[1] for row in data] 

index = [i for i,val in enumerate(x)] 

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
ax1.set_title("Plot DAta")  
ax1.set_xlabel('x') 
ax1.set_ylabel('y') 
ax1.set_xticklabels(x) 
ax1.plot(index ,y, c='r', label='the data') 
leg = ax1.legend() 
plt.locator_params(nbins=len(index)-1) 
plt.show() 

答えて

3

を(私は以下import pandas as pdを使用)、これは実際には1行で行うことができますkeywordは、pandasにインデックスをdatetimeに変換しようとします。結果は次のようになります。 enter image description here

+0

ありがとう、私はこれを試して、それは完全に動作します!私はまだスキルセットを持っていないので、とても美しいものを書くことができます! –

3

pandasDataFrameオブジェクトが既に機能を持っていますplot()これは非常に役に立ちます。クリップボードにあなたの例をコピーすると、私はやってプロットを行うことができます:

import pandas as pd 
import matplotlib.pyplot as plt 

df = pd.read_clipboard(delimiter=',') 
df.plot() 
ax = plt.gca() 
ax.set_xticklabels(df.Date) 
plt.savefig(filename='test.png') 
2

これらの行は、スペースではなくコンマでデータ行を分割:あなたは上分割する文字を指定する必要が

x = [row.split()[0] for row in data] 
y = [row.split()[1] for row in data] 

(空白文字)がデフォルトです:

x = [row.split(',')[0] for row in data] 
y = [row.split(',')[1] for row in data] 

EDIT:追加データクリーニング

データファイルは、最後の改行行が第二の要素を持たないので、次に

y = [row.split(',')[1] for row in data] 

改行は、IndexErrorが発生しますがある場合:

>>> data = 'a,b\nc,d\n'.split('\n') 
>>> print(data) 
['a,b', 'c,d', ''] 
>>> print(data[0].split(',')) 
['a', 'b'] 
>>> print(data[-1].split(',')) 
[''] 

は、行がないことをテストすることによって、このに対する防御値を分割する前に空の文字列:

x = [row.split(',')[0] for row in data if row] 
y = [row.split(',')[1] for row in data if row] 

また、通過する値から列ヘッダー名を削除する必要がありますgからmatplotlibへ。 xとyの値を作成する際に最初の行を省略することによってこれを行う:parse_dates

pd.read_table('datafile.txt', parse_dates = True, index_col = 0, sep = ',').plot() 

:パンダと

>>> data = 'First,Second\na,b\nc,d\n'.split('\n') 
>>> print(data) 
['First,Second', 'a,b', 'c,d', ''] 
>>> x = [row.split(',')[0] for row in data[1:] if row] 
>>> print(x) 
['a', 'c'] 
>>> y = [row.split(',')[1] for row in data[1:] if row] 
>>> print(y) 
['b', 'd'] 
+0

ありがとうございます!しかし、私は、[データの行のために[0] row.split( '')] 'X =有するとき ' Iは以下得る: はIndexError:範囲外のリストインデックスを.. ..? –

+1

@AlexWaltonは 'x = ...'行で 'y = ...'行ではないと確信していますか? str.splitメソッドは、私の経験では少なくとも1つの要素を常に含んでいるので、インデックス0の 'IndexError'はそう思わないでしょう。しかし、索引1の 'IndexError'はファイルにカンマなしの行が含まれている場合に発生します。たとえば、最後に空行がある場合などです。 – snakecharmerb

+0

帰ってくれてありがとう!私はコードを正しくフォーマットしていませんでした。うん、あなたは正しい、それは 'x = ...'ではなく 'y = ... 'の上にある。私は元のテキストファイルに戻って、 "スペース"を削除しようとしましたが、それでもエラーが発生します。 –

関連する問題