(HH:MM:SS.mmmmmm)形式のタイムスタンプの配列と、それぞれがタイムスタンプ配列の値に対応する浮動小数点数の別の配列があります。
Matplotlibを使用して、x軸に時間、y軸に数値をプロットできますか?
私は試みましたが、どういうわけかそれは浮動小数点数の配列のみを受け入れていました。どうすれば時間をプロットできますか?何らかの方法で形式を変更する必要がありますか?
(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)
scatter_date()
、このグラフを取得する明白な/直接的な方法もありません。
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()
次のような画像を生成します。
plot
のscatter
)。
Type Error - invalid type promotion
。
datetime.datetime
x軸にオブジェクトがある散布図の例を投稿に追加しました。
plt.grid(True)
matplotlib.__version__
2.2.2で動作します。ただし、散布図には、デフォルトで非常に広いx制限がいくつか設定されています。この回答は手動で調整する以外の回避策を提供するようですplt.xlim(...)
:stackoverflow.com/a/46467896/1025391
7年後、このコードは私を助けました。しかし、私の時間はまだ正しく表示されていませんでした。
Matplotlib 2.0.0を使用していて、Paul Hによるmatplotlibのx軸目盛りラベルの日付フォーマットの編集から次のコードを追加する必要がありました。
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()
これにより、必要に応じて泡が分布した画像が生成されます。