2016-05-13 37 views
0

我想要的只是非常簡單,我只想讓定位器的刻度從指定的時間戳開始:
peudo code: locator.set_start_ticking_at(datetime_dummy)
我沒有找到任何運氣到目前爲止。matplotlib如何指定時間定位器的開始時間戳記的時間戳?

下面是代碼的這個問題的部分:

的上面的代碼
axes[0].set_xlim(datetime_dummy) # datetime_dummy = '2015-12-25 05:34:00' 
    import matplotlib.dates as matdates 
    seclocator = matdates.SecondLocator(interval=20) 
    minlocator = matdates.MinuteLocator(interval=1) 
    hourlocator = matdates.HourLocator(interval=12) 

    seclocator.MAXTICKS = 40000 
    minlocator.MAXTICKS = 40000 
    hourlocator.MAXTICKS = 40000 

    majorFmt = matdates.DateFormatter('%Y-%m-%d, %H:%M:%S') 
    minorFmt = matdates.DateFormatter('%H:%M:%S') 

    axes[0].xaxis.set_major_locator(minlocator) 
    axes[0].xaxis.set_major_formatter(majorFmt) 
    plt.setp(axes[0].xaxis.get_majorticklabels(), rotation=90) 

    axes[0].xaxis.set_minor_locator(seclocator) 
    axes[0].xaxis.set_minor_formatter(minorFmt) 
    plt.setp(axes[0].xaxis.get_minorticklabels(), rotation=90) 

    # other codes 
    # save fig as a picture 

x軸的每一跳都讓我:

enter image description here

我如何告訴未成年定位器與主要定位符對齊?
如何告訴定位器哪些時間戳開始打勾?

我曾嘗試:
set_xlim不會做的伎倆
seclocator.tick_values(datetime_dummy, datetime_dummy1)沒有做任何事情

回答

2

除了使用interval關鍵字參數,使用bysecondbyminute指定究竟哪些秒和分鐘你與標記。參數bysecondbyminute用於構建dateutil rrulerrule生成符合某些指定模式的日期時間(或者,可以說,「規則」)。

例如,bysecond=[20, 40]限制了日期時間到那些second小號 等於20或40。因此,下面,次刻度標記僅出現日期時間 其soconds等於20或40。

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.dates as matdates 

N = 100 

fig, ax = plt.subplots() 
x = np.arange(N).astype('<i8').view('M8[s]').tolist() 
y = (np.random.random(N)-0.5).cumsum() 
ax.plot(x, y) 


seclocator = matdates.SecondLocator(bysecond=[20, 40]) 
minlocator = matdates.MinuteLocator(byminute=range(60)) # range(60) is the default 

seclocator.MAXTICKS = 40000 
minlocator.MAXTICKS = 40000 

majorFmt = matdates.DateFormatter('%Y-%m-%d, %H:%M:%S') 
minorFmt = matdates.DateFormatter('%H:%M:%S') 

ax.xaxis.set_major_locator(minlocator) 
ax.xaxis.set_major_formatter(majorFmt) 
plt.setp(ax.xaxis.get_majorticklabels(), rotation=90) 

ax.xaxis.set_minor_locator(seclocator) 
ax.xaxis.set_minor_formatter(minorFmt) 
plt.setp(ax.xaxis.get_minorticklabels(), rotation=90) 

plt.subplots_adjust(bottom=0.5) 
plt.show() 

enter image description here

+0

謝謝你謝謝你!你能否在你的答案中增加一個更詳細的解釋,說明'bysecond = list'是如何工作的?我想我在閱讀文檔時忽略了這個參數,因爲我不明白它做了什麼。謝謝 – eliu