フォーマット(HH:MM:SS.mmmmmm)のタイムスタンプの配列と、それぞれがタイムスタンプ配列の値に対応する浮動小数点数の別の配列を持っています。
Matplotlibを使用して、x軸に時間をプロットし、y軸に数値をプロットできますか?
私はしようとしていたが、どういうわけかそれはフロートの配列を受け入れるだけでした。時間をプロットするにはどうすればよいですか?何らかの方法でフォーマットを変更する必要がありますか?
最初にタイムスタンプをPython datetime
オブジェクトに変換する必要があります(datetime.strptime
を使用)。次に、date2num
を使用して、日付をmatplotlib形式に変換します。
plot_date
を使用して日付と値をプロットします。
dates = matplotlib.dates.date2num(list_of_datetimes)
matplotlib.pyplot.plot_date(dates, values)
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()
結果の画像:
これは散布図と同じです。
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()
次のような画像を作成します。
7年後、このコードは私を助けてくれました。しかし、私の時間はまだ正しく表示されていませんでした。
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)に変更し、時刻を正しく表示しました。
コミュニティに感謝します。
Matplotlibバージョン2.0.2を使用してこれに問題がありました。上記の例を実行すると、中央に積み重ねられた一連のバブルができました。
別の行を追加して問題を「修正」しました。
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()
これにより、必要に応じてバブルが分散した画像が生成されます。