33

次の構造の配列にデータがあります。

[[1293606162197, 0, 0],
 [1293605477994, 63, 0],
 [1293605478057, 0, 0],
 [1293605478072, 2735, 1249],
 [1293606162213, 0, 0],
 [1293606162229, 0, 0]]

1 列目はエポック時間 (in ms)、2 列目はy1、3 列目は ですy2y1x 軸とy2左右の y軸に時間をプロットする必要があります。

ドキュメントを精査してきましたが、「28/12 16:48」、つまり「日付/月の時間:分」のように、x 軸の目盛りに日付と時刻の両方を表示する方法が見つかりませんでした。すべてのドキュメントは日付だけを表示するのに役立ちますが、それは私が望むものではありません。これについて何か助けていただければ幸いです。

そして、そう思われるかもしれませんが、これは宿題ではありません。これは実際には、以前の質問Read and graphing data read from huge filesのフォローアップです。

4

1 に答える 1

49

これが役立つことを願っています。私はいつも matplotlib の日付に苦労してきました。Matplotlibには、エポックからの日数であるfloat 形式が必要です。ヘルパー関数num2datedate2numpython 組み込み関数datetimeを使用して、to/from の変換を行うことができます。フォーマッティング ビジネスは、この例から取り除かれました。を使用して、任意のプロットの軸を日付軸に変更できます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()

結果

于 2011-03-31T15:16:13.603 に答える