2009-10-15 17 views
88

私はタイムスタンプの配列(HH:MM:SS.mmmmmm)と、タイムスタンプ配列の値にそれぞれ対応する浮動小数点数の配列を持っています。MatplotlibでPythonをプロットする時間

Matplotlibを使用して、x軸に時間を、y軸に数値をプロットすることはできますか?

私はしようとしていましたが、何とか浮動小数点配列を受け入れるだけでした。時間をプロットするにはどうしたらいいですか?形式を変更する必要はありますか?

答えて

107

まず、タイムスタンプをPython datetimeオブジェクト(datetime.strptimeを使用)に変換する必要があります。次に、date2numを使用して日付をmatplotlib形式に変換します。 plot_dateを使用して

プロットの日付と値:

dates = matplotlib.dates.date2num(list_of_datetimes) 
matplotlib.pyplot.plot_date(dates, values) 
+1

これは、日付またはちょうど時間をプロットしますか?私は唯一の時間datetimeに変換するので、年が1990年に設定されているので。 – randomThought

+0

"... datetimeに変換すると、年は1990年に設定されます":あなたは文字列からdatetimeに変換するために使用するコードを投稿してください?変換で何かが間違っている可能性があります。 Re。チャートラベルの書式設定については、J. K.Seppänenが提供するdate_demo1リンクを参照してください。 matplotのlibのドキュメントは素晴らしい、BTWです。 http://matplotlib.sourceforge.net/index.html – codeape

+11

plot_dates - > matplotlib.pyplot.plot_date(日付、値) – Pete

52

あなたはまた(その文字列表現からそれらを解析した後)pyplot.plotを使用して、タイムスタンプ、値のペアをプロットすることができます。 (matplotlibのバージョン1.2.0および1.3.1でテスト)

例:ここ


Line Plotは、散布図と同じです:

import datetime 
import random 
import matplotlib.pyplot as plt 

# make up some data 
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)] 
y = [i+random.gauss(0,1) for i,_ in enumerate(x)] 

# plot 
plt.plot(x,y) 
# beautify the x-labels 
plt.gcf().autofmt_xdate() 

plt.show() 

画像を得られました。

import datetime 
import random 
import matplotlib.pyplot as plt 

# make up some data 
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)] 
y = [i+random.gauss(0,1) for i,_ in enumerate(x)] 

# plot 
plt.scatter(x,y) 
# beautify the x-labels 
plt.gcf().autofmt_xdate() 

plt.show() 

は次のように画像生成されます

Scatter Plot

+2

散布図を作成するにはどうすればいいですか? – andi

+4

@andi私の例のように動作するはずです( 'plot'を' scatter'に変更してください)。 – moooeeeep

+1

なぜこれは私が実際に誰も*散布*散布図を使用していない場所で遭遇した5番目の質問です - それは動作しません理解していません。 'タイプエラー - 無効なタイプ昇格'。 – dwanderson

2

7年後にこのコードは、私を助けています。 しかし、私の時はまだ正しく表示されませんでした。 matplotlibの2.0.0を使用し

enter image description here

と私は(%のH:%のM)に形式を変更ポールH.によってEditing the date formatting of x-axis tick labels in matplotlibから

import matplotlib.dates as mdates 
myFmt = mdates.DateFormatter('%d') 
ax.xaxis.set_major_formatter(myFmt) 

を次のコードビットを追加しなければならなかったと時間が正しく表示されます。 enter image description here

コミュニティに感謝します。

1

matplotlibバージョン2.0.2を使用してこの問題が発生しました。上の例を実行すると、私は中心に置かれた一連の気泡を得ました。

graph with centered stack of bubbles

Iは、別の行を追加することによって、問題を "固定":

plt.plot([],[]) 

を全体のコードスニペットは、次のようになる。

import datetime 
import random 
import matplotlib.pyplot as plt 
import matplotlib.dates as mdates 


# make up some data 
x = [datetime.datetime.now() + datetime.timedelta(minutes=i) for i in range(12)] 
y = [i+random.gauss(0,1) for i,_ in enumerate(x)] 

# plot 
plt.plot([],[]) 
plt.scatter(x,y) 

# beautify the x-labels 
plt.gcf().autofmt_xdate() 
myFmt = mdates.DateFormatter('%H:%M') 
plt.gca().xaxis.set_major_formatter(myFmt) 

plt.show() 
plt.close() 

これは、必要に応じて分散気泡を有する画像を生成します。

graph with bubbles distributed over time

+0

更新されたバージョンをありがとうございます。 – Aventinus

関連する問題