2017-04-12 12 views
0

私の半時間ごとの時系列をプロットすると、私の軸ラベルは奇妙です(16:33:12h程度...) これを修正するためにHourLocatorを使うと(16: 16時00分)、私のxラベルは完全に消えます。matplotlib HourLocatorが私のxラベルを盗む

私のコードは次のとおりです。

from datetime import date, timedelta, datetime, time 
from matplotlib.dates import DayLocator, HourLocator 
import matplotlib.pyplot as plt 

start = time(0, 0, 0) 
delta = timedelta(minutes=30) 
times = [] 

for i in range(len(day_load)): 
    dt = datetime.combine(date.today(), time(0, 0)) + delta * i 
    times.append(dt.time()) 

load = [i/48 for i in range(48)] 

fig, ax = plt.subplots() 
ax.plot_date(times, load) 
ax.xaxis.set_major_locator(HourLocator()) 
plt.show() 

どのように私は、「偶数」のラベルを達成することができます(ベストプラクティスの方法で - 私は再び他のすべてのプロットのためのコードを書き換える必要はありません)。 私は最後から二番目の行をコメントアウトすると、私は通常の「奇数」のラベル:(答えを

感謝を入手!

答えて

0

あり

  • 時刻とともに完全なdatetimeオブジェクトを扱う必要があります。したがってdt.time()の代わりにdtを直接追加する必要があります。
  • ロケータだけでなく、いいティックラベルを作成するためのフォーマッタも必要です。ここでは、DateFormatter("%H:%M")を使用して時間と分を表示できます。

完全なコード:

from datetime import date, timedelta, datetime, time 
from matplotlib.dates import DayLocator, HourLocator,DateFormatter 
import matplotlib.pyplot as plt 

start = time(0, 0, 0) 
delta = timedelta(minutes=30) 
times = [] 
n=48 

for i in range(n): 
    # use complete datetime object, not only time 
    dt = datetime.combine(date.today(), time(0, 0)) + delta * i 
    times.append(dt) 

load = [i/float(n) for i in range(n)] 

fig, ax = plt.subplots() 
ax.plot_date(times, load) 

# set a locator, as well as a formatter 
ax.xaxis.set_major_locator(HourLocator()) 
ax.xaxis.set_major_formatter(DateFormatter("%H:%M")) 

#optionally rotate the labels and make more space for them 
fig.autofmt_xdate() 
plt.show() 

enter image description here

0

あなたのコードが実行されない、day_loadは未定義であると私は他の問題を取得しているため。

ない答えが、私はあなたがpandasを使用してのより良いだと思う。それはdate_rangeを作成することが容易になり、そしてプロットは調整なしでかなりうまく処理されます。

from scipy import stats 
import pandas as pd 

n = 20 
index = pd.date_range(start = '2016-01-01', periods = n, freq='1H') 
df = pd.DataFrame(index = index) 
df["value"] = stats.norm().rvs(n) 

df.plot() 
関連する問題