2017-02-28 3 views
1

私はパンダシリーズとしてロードしたファイルを持っています。しかし、このファイルは単一のノードマシン上で読み込むために大きくなり、これらの値をグラフ上で更新しながら、一度に数行ずつ読みたいと思います。パンダシリーズからリアルタイムグラフをプロットする方法は?そして、ファイルから断続的に読む

ファイルデータのサンプルを以下に示します。

ip,date,time,zone,cik,accession,extention,code,size,idx,norefer,noagent,find,crawler,browser 
101.81.76.dii,2016-03-31,00:00:00,0.0,1283497.0,0001209191-16-111028,-index.htm,200.0,14926.0,1.0,0.0,0.0,10.0,0.0, 
104.40.128.jig,2016-03-31,00:00:00,0.0,1094392.0,0001407682-16-000270,.txt,200.0,5161.0,0.0,0.0,0.0,10.0,0.0, 

私のコードのサンプルは以下の通りである:

data = pd.read_csv('filepath') 
data2 = data[['ip','time','date','size']] 
data2['size/MB']= data2['size']/1024 
data3 = data2[['ip','time','date','size/MB']] 
gr = data3.groupby(['date','time']).sum() 
GB = gr['size/GB']= gr['size/MB']/1024 

columns = ["size/MB"] 
df=GB[0:0] 
"""plt.ion()""" 
plt.figure() 
i=10 
while i<len(GB): 
    df = df.append(GB[0:i]) 
    ax = df.plot(secondary_y=['prex']) 
    plt.show() 
    tm.sleep(0.5) 
    i+=10 

これは、しかし、複数のウィンドウを作成します。 plt.show()の代わりにplt.draw()機能を使用しようとしましたが、機能しません。 おかげ

答えて

1

(1)あなたが代わりに新しい数字を、同じ軸にプロットしたい場合は、既存のmatplotlibのを提供する必要がデータフレームのプロット法

DataFrame.plot(..., ax=ax) 

axオブジェクトを軸(2)plt.show()を呼び出すと、イベントループを引き継ぐウィンドウが開きます。残りのスクリプトは、このウィンドウを閉じるまで停止します。したがってループ内で呼び出すことは避ける必要があります。 plt.draw()は、インタラクティブモードでループ内に描画するのに適しています。したがって、ループの前にplt.ion()を呼び出す必要があります。

(3)time.sleep()を使用すると、matplotlibプロットウィンドウのようなGUI要素を操作すると悪い考えです。これは文字通りアプリケーションをスリープさせ、応答しないウィンドウにつながります。代わりにplt.pause()を使用してください。

(4)データフレームのプロット方法でプロットするデータを指定する必要があります。また、軸をクリアする必要があります。そうしないと、古いプロットがプロット内に残ります。

ここでは、データフレームをアニメーション化する作業スクリプトがあります。

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

x = np.arange(100) 
y = np.random.rand(100) 
df = pd.DataFrame({"x":x, "y":y}) 
df2 = df[0:0] 

plt.ion() 
fig, ax = plt.subplots() 
i=0 
while i < len(df): 
    df2 = df2.append(df[i:i+1]) 
    ax.clear() 
    df2.plot(x="x", y="y", ax=ax) 
    plt.draw() 
    plt.pause(0.2) 
    i+=1 
plt.show() 

これは、matplotlibグラフをアニメーション化する最も効率的な方法ではありませんが、コードに近いです。

+0

ご意見ありがとうございました。コードは、初期コードの近くで完全に動作します。 – TheSolider

関連する問題