2013-02-13 153 views
1

我有一個程序可以處理不同種類的數據。有些數據很大,有些非常小。 因爲某些原因我只能用matplotlib繪製圖如下:自動格式化x軸

 TimeDelta=FF.index[-1]-FF.index[0]   
     ax = fig.add_subplot(111) 
     if TimeDelta>timedelta(days=6): 
      intr=int(TimeDelta.days/6) 
     else: 
      intr=2 
    #ax.xaxis.set_minor_locator(dates.WeekdayLocator(byweekday=(1),interval=intr)) 
     ax.xaxis.set_minor_locator(dates.DayLocator(interval=intr)) 
     ax.xaxis.set_minor_formatter(dates.DateFormatter('%b%d')) 
     years= matplotlib.dates.YearLocator() # every year 
     yearsFmt = matplotlib.dates.DateFormatter('') 
     ax.xaxis.set_major_locator(years) 
     ax.xaxis.set_major_formatter(yearsFmt) 

我覺得這個方法太複雜,不要某人有其他簡單的方法來處理這種情況呢?

+0

爲什麼你認爲它太複雜了? – tacaswell 2013-02-13 23:47:41

+0

我不知道是否有像'ax.xautofomat'或我不知道可以自動格式化x軸的方法。 – wuwucat 2013-02-14 03:33:07

+0

@ user1843099 - 看看'fig.autofmt_xdate()'。 (儘管它基本上只是旋轉日期標籤。)另外,你可能已經在做這個了,但是調用'ax.xaxis_date()'(或者使用'plot_date')將會爲你設置基本的格式化程序。當然,你正在做的是稍微調整一下,而自動格式化器的當前狀態遠非完美。 – 2013-02-14 03:47:01

回答

1

dates中有Auto*類,它們有一些可以調節的旋鈕,但您似乎想要一個非常特定的格式。我只想做一個函數:

def my_x_axis_format(ax, dt): 
    if dt>timedelta(days=6): 
     intr=int(dt.days/6) 
    else: 
     intr=2 
    #ax.xaxis.set_minor_locator(dates.WeekdayLocator(byweekday=(1),interval=intr)) 
    ax.xaxis.set_minor_locator(dates.DayLocator(interval=intr)) 
    ax.xaxis.set_minor_formatter(dates.DateFormatter('%b%d')) 
    years= matplotlib.dates.YearLocator() # every year 
    yearsFmt = matplotlib.dates.DateFormatter('') 
    ax.xaxis.set_major_locator(years) 
    ax.xaxis.set_major_formatter(yearsFmt) 

,然後你可以讓你的數字,因爲

TimeDelta=FF.index[-1]-FF.index[0]   
ax = fig.add_subplot(111) 
my_x_axis_format(ax, TimeDelta) 
+0

謝謝,這是一個好主意:) – wuwucat 2013-02-14 14:40:57