web-dev-qa-db-ja.com

Matplotlibを使用したPythonでの時間のプロット

フォーマット(HH:MM:SS.mmmmmm)のタイムスタンプの配列と、それぞれがタイムスタンプ配列の値に対応する浮動小数点数の別の配列を持っています。

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

私はしようとしていたが、どういうわけかそれはフロートの配列を受け入れるだけでした。時間をプロットするにはどうすればよいですか?何らかの方法でフォーマットを変更する必要がありますか?

126
randomThought

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

plot_date を使用して日付と値をプロットします。

dates = matplotlib.dates.date2num(list_of_datetimes)
matplotlib.pyplot.plot_date(dates, values)
140
codeape

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

例:

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()

結果の画像:

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.scatter(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()

plt.show()

次のような画像を作成します。

Scatter Plot

71
moooeeeep

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

enter image description here

Matplotlib 2.0.0を使用して、次のコードを追加する必要がありました matplotlibのx軸の目盛りラベルの日付書式の編集 by Paul H.

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

フォーマットを(%H:%M)に変更し、時刻を正しく表示しました。 enter image description here

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

14
GeorgeLPerkins

Matplotlibバージョン2.0.2を使用してこれに問題がありました。上記の例を実行すると、中央に積み重ねられた一連のバブルができました。

graph with centered stack of bubbles

別の行を追加して問題を「修正」しました。

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

9
Kirk