2017-04-04 9 views
0

私のデータは次のようになります。だから、のPython:日時エントリのプロットデータフレームが

900324492 900405679 900472531 
1 2017-04-03 08:04:09 2017-04-03 07:49:53 2017-04-03 07:52:39 
2 2017-04-03 08:05:36 2017-04-03 07:54:36 2017-04-03 07:52:19 
3 2017-04-03 08:05:28 2017-04-03 07:43:00 2017-04-03 07:50:52 
4 2017-04-03 08:06:05 2017-04-03 07:49:42 2017-04-03 07:53:55 

、各列のために、私は(正確にはDateTimeオブジェクト、)タイムスタンプのセットを持っています。私は散布図を作成するのが好きです.xはdfインデックスまたは行番号です(つまり、x=[1,2,3,4,...])、yは時刻です)。たとえば、dfに4行10列ある場合、x軸は1, 2, 3, 4、 。x=1のためにそこにそれは単純な作業のように思えた

最初の行のエントリごとに1ポイントをする必要がありますが、私は少し苦労してる今のところ私のコード:。

df = pd.read_csv('test.csv') 
df2 = df.apply(lambda x : pd.to_datetime(x)) 

fig = plt.figure()                                                                
ax = fig.add_subplot(111)                                                              
y = df2.ix[:, 1]                                                           
x = df2.index.values 
# returns nonsense 
ax.plot(x,y) 
# TypeError: invalid type promotion 
ax.scatter(x=x, y = df2.ix[:,1]) 
# TypeError: Empty 'DataFrame': no numeric data to plot 
df2.ix[:,1].plot() 

テストファイルリンク:test.csv

答えて

1

自分の例を確認してください。to_pydatetime()およびdate2num()およびnp.nan。 (あなたは最終的に日時書式にy軸をタグ付けする必要があります。)

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import matplotlib.dates as dates 


df = pd.read_csv('test.csv', header=None) 
df2 = df.apply(lambda x : pd.to_datetime(x)) 

fig = plt.figure()                                                                
ax = fig.add_subplot(111)                                                              
y = df2.ix[:, 1]                                                           
x = df2.index.values 

def fix(x): 
    try: 
     return dates.date2num(x.to_pydatetime()) 
    except: 
     return np.nan 

y_lab = [str(e) for e in y] 
y_ = [fix(e) for e in y] 

ax.scatter(x=x, y=y_) 

plt.yticks(y_, y_lab, rotation=0, size=6) 
plt.show() 

enter image description here

+0

感謝を!しかしy軸が見えますか?それを解釈することは容易ではありません。それは、それをやるためのモチベーションと矛盾します。それは小数点の代わりに時間を表示するように、それを修正する方法はありますか? – Pep

+0

ylabelに 'num2date()'関数を使うことができます。 – su79eu7k

+0

私にとってはやっかいなことが証明されています... – Pep

関連する問題