2017-02-22 10 views
5

から始まる:MM。私はxticksを15分ごとに繰り返すように設定できますが、最初のティックは初めてです(たとえば04:40)。matplotlibの:xticks 15分ごとに、私はHHとしてフォーマット時間との時間に対する温度の値をプロットしようとしています時間

時間に同時四分の一時間に発生するダニをシフトする方法がある(04:45、05:00、05:15には、など)?次のように私の現在のコードは次のとおりです。

import matplotlib.pyplot as plt 
import matplotlib.dates as md 
import datetime as dt 

## Dummy times and temperatures 
time = [dt.datetime(2017,2,15,4,40),dt.datetime(2017,2,15,4,46),dt.datetime(2017,2,15,4,52),dt.datetime(2017,2,15,4,58),dt.datetime(2017,2,15,5,4),dt.datetime(2017,2,15,5,10)] 
temp = [7, 8, 9, 10, 11, 12] 

## Plot the data 
figtemp, ax = plt.subplots(1, 1) 
ax.plot(time, temp) 

## Set time format and the interval of ticks (every 15 minutes) 
xformatter = md.DateFormatter('%H:%M') 
xlocator = md.MinuteLocator(interval = 15) 

## Set xtick labels to appear every 15 minutes 
ax.xaxis.set_major_locator(xlocator) 

## Format xtick labels as HH:MM 
plt.gcf().axes[0].xaxis.set_major_formatter(xformatter) 

答えて

-1

、同時準々時間、

enter image description here


シフト時間を生成使用Axes.set_xticklabels

labels = ['04:45', '05:00', '05:15'] 
plt.gca().set_xticklabels(labels) 

import datetime 

list_dt = [ datetime.datetime(2017,2,15,4,40), 
      datetime.datetime(2017,2,15,4,46), 
      datetime.datetime(2017,2,15,4,52), 
      datetime.datetime(2017,2,15,4,58), 
      datetime.datetime(2017,2,15,5,4), 
      datetime.datetime(2017,2,15,5,10)] 

adjust_list_dt = list() 

for dt in list_dt: 
    print(dt.minute//15) 

    if dt.minute % 15 == 0: 
     adjust_minutes = dt.minute 
    else: 
     adjust_minutes = (dt.minute//15 + 1)*15 

    if adjust_minutes == 60: 
     adjust_list_dt.append(dt.replace(hour=dt.hour+1, minute=0)) 
    else: 
     adjust_list_dt.append(dt.replace(minute=adjust_minutes)) 

print(adjust_list_dt) 
# Output 
''' 
[datetime.datetime(2017, 2, 15, 4, 45), 
datetime.datetime(2017, 2, 15, 5, 0), 
datetime.datetime(2017, 2, 15, 5, 0), 
datetime.datetime(2017, 2, 15, 5, 0), 
datetime.datetime(2017, 2, 15, 5, 15), 
datetime.datetime(2017, 2, 15, 5, 15)] 
''' 
+0

ここで問題となるのは、データが先行して発生する時間を知る必要があることです。また、時間を手で入力しなければならないのはかなり不合理です。 – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnest、plsが私の編集した答えをチェックしました。私はあなたの解決策がよりエレガントだと信じています – SparkAndShine

+1

はい、時間と分を手動で設定するという問題を解決します。ニース。しかし、それは実際には1つの行で実行できる作業のために少し複雑です。 – ImportanceOfBeingErnest

6

MinuteLocatorには、byminute引数を使用して分0,15,30,45のみを使用するように指示できます。

xlocator = md.MinuteLocator(byminute=[0,15,30,45], interval = 1) 
関連する問題