次の構造の配列にデータがあります。
[[1293606162197, 0, 0],
[1293605477994, 63, 0],
[1293605478057, 0, 0],
[1293605478072, 2735, 1249],
[1293606162213, 0, 0],
[1293606162229, 0, 0]]
最初の列はエポック時間(ms
で)、2番目はy1
および3番目はy2
。 x軸に時間をプロットし、y1
およびy2
左右のy軸。
私はドキュメントを精査してきましたが、「28/12 16:48」、つまり「date/month hour:min」のように、x軸の目盛りに日付と時刻の両方を表示する方法を見つけることができませんでした。すべてのドキュメントは、日付だけを表示するのに役立ちますが、それは私が望むものではありません。これについての助けをいただければ幸いです。
そして、それがように思えるかもしれないが、これは宿題ではありません。実際には、以前の質問 巨大なファイルから読み取ったデータの読み取りとグラフ化 のフォローアップです。
これがお役に立てば幸いです。私は常にmatplotlibの日付に苦労しました。 Matplotlibには float format が必要です。これはエポックからの日数です。ヘルパー関数num2date
およびdate2num
とともにpython builtin datetime
を使用して、/から変換することができます。フォーマットビジネスは廃止されました- this example。set_major_formatter
を使用して、任意のプロットの軸を日付軸に変更できます。
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import dates
import datetime
a = np.array([
[1293605162197, 0, 0],
[1293605477994, 63, 0],
[1293605478057, 0, 0],
[1293605478072, 2735, 1249],
[1293606162213, 0, 0],
[1293606162229, 0, 0]])
d = a[:,0]
y1 = a[:,1]
y2 = a[:,2]
# convert Epoch to matplotlib float format
s = d/1000
ms = d-1000*s # not needed?
dts = map(datetime.datetime.fromtimestamp, s)
fds = dates.date2num(dts) # converted
# matplotlib date format object
hfmt = dates.DateFormatter('%m/%d %H:%M')
fig = plt.figure()
ax = fig.add_subplot(111)
ax.vlines(fds, y2, y1)
ax.xaxis.set_major_locator(dates.MinuteLocator())
ax.xaxis.set_major_formatter(hfmt)
ax.set_ylim(bottom = 0)
plt.xticks(rotation='vertical')
plt.subplots_adjust(bottom=.3)
plt.show()