2013-03-06 126 views
13

我有X的一個簡單的數據集和Y值,我在matplotlib繪製。我的數據中的獨立變量是持續時間/時間間隔(例如60秒,2小時,24小時,10天),在我的輸入數據中它總是表示爲整數秒。我的問題是,matplotlib是否有任何方法可以用人類可讀的形式智能地設置持續時間軸標籤?matplotlib智能軸標籤timedelta

例如,在標尺的小端,這將是可取的,以顯示說30秒簡單地稱爲「30秒」。在規模較大的情況下,顯示「10天」而不是864000秒會更好。在兩者之間的某個地方,最好是在「分鐘」和「小時」內閱讀標籤。 matplotlib是否有任何自動的方式來推斷大約人類可讀的東西,其持續時間跨越幾個數量級?

理想的任何方法,我用應該推廣到跨越不同的時間的時間尺度,而不是單獨針對一個輸入數據集的曲線的數據集。

回答

12

你能提供一個例子嗎?這是你想要的東西:

import datetime                                                                 

import numpy as np                                                                
import pylab as plt                                                                
import matplotlib                                                                

fig = plt.figure()                                                                
ax = fig.add_subplot(111)                                                              

x = np.linspace(0, 300) # 5 minutes                                                              
y = np.random.random(len(x))                                                             

ax.plot(x, y)                                                                 

def timeTicks(x, pos):                                                               
    d = datetime.timedelta(seconds=x)                                                           
    return str(d)                                                                
formatter = matplotlib.ticker.FuncFormatter(timeTicks)                                                       
ax.xaxis.set_major_formatter(formatter)                                                           

plt.show() 

Example output

它使用蟒蛇timedelta。 864000秒以上將導致「10天,10點00分」。當然,您可以在上面的timeTicks()函數中使用更高級的格式。

+0

此外,如果你想修改xticks露面每一分鐘:'ax.xaxis.set_major_locator(plt.MultipleLocator(1 * 60))' – 2018-02-07 01:42:22