2

x軸が24時間から0時間にジャンプする、分数時間の関数としてグラフを表示したいと思います。ただし、プロットされた数量は、日付の境界を越えてスムーズに結合する必要があります。単調に増加するx軸のさまざまな時間単位を使用できますが、x軸の整数の目盛りの位置で時間を表示したいのですが、どうすればよいですか?

hours = [19,20.5,21.5,22.5,23.5,0.5,1.5,2.5,3,4]
list1 = [random.randint(1,10) for x in range(10)]
plt.plot(hours, list1)
4

2 に答える 2

2

このhoursリストは、より完全な日付構造から時間を取り除いた結果だと思いますか?

日付オブジェクト(実際にはモントニックであるように日付情報を含む)を変換すると、日付に対してdatetime直接プロットできlist1ます。その後、

import datetime

d = datetime.datetime.now()
delta = datetime.timedelta(hours=1)
dates = [d]
for j in range(20):
    dates.append(dates[-1] + delta)

date_list = dates
list1 = rand(len(dates))
figure()
ax = gca()
ax.plot(date_list,list1)
ax.xaxis.set_major_locator(
    matplotlib.dates.HourLocator()
)
ax.xaxis.set_major_formatter(
    matplotlib.dates.DateFormatter('%H')
)

ここから適応

コードの結果

于 2012-12-04T21:29:45.527 に答える
2

まあ、これは非常に汚いです、そして私はそれが投稿されたので他の答えipython --pylabで行くことを試みます、しかし(で):

In [1]: def monotonic_hours(h):
    hours = h[:]
    for i, _ in enumerate(h[1:], 1):
        while hours[i-1] > hours[i]:
            hours[i] += 24
    return hours
   ...: 

In [2]: %paste
hours = [19,20.5,21.5,22.5,23.5,0.5,1.5,2.5,3,4]
list1 = [random.randint(1,10) for x in range(10)]

## -- End pasted text --

In [3]: plot(monotonic_hours(hours), list1)
Out[3]: [<matplotlib.lines.Line2D at 0x3271810>]

In [4]: xticks(xticks()[0], [int(h%24) for h in xticks()[0]])

ここに画像の説明を入力してください

注:これは、デフォルトxticksが整数の位置にある場合は正確です。それ以外の場合は、次のように実行できます。

ticks = sorted(set(int(round(t)) for t in xticks()[0]))
xticks(ticks, [h%24 for h in ticks])

注2:なしipythonですべてを呼び出すことができますplt

于 2012-12-04T21:31:36.937 に答える