2013-09-22 21 views
0

這個問題有兩個部分。如果缺乏其他來源的搜索,請耐心等待。這是我的問題的一部分。matplotlib中有沒有現成的解決方案來繪製時間?

我用tespeed產生的數據寫了一個腳本。數據格式爲「YYYYMMDDhhmm,降速,升速,單位,服務器」(hh:...)。

201309221537,0.28,0.04,"Mbit","['speedtest server']" 
201309221542,5.78,-1.00,"Mbit","['speedtest server']" 
201309221543,0.15,0.06,"Mbit","[...]" 

此腳本繪製上述數據:

#!/usr/bin/env  
python2.7                      
import matplotlib 
matplotlib.use('Agg') 
import matplotlib.pyplot as plt 
import csv 

def main(): 
    x = [] 
    y = [] 
    with open('/path/to/my/public_html/stdout_tespeed_log.csv','r') as csvfile: 
     strData = csv.reader(csvfile, delimiter=',') 
     for row in strData: 
      x += [float(row[0])] 
      y += [float(row[1])] 
    fig = plt.figure() 
    plt.plot(x,y,'+', label='Average download') 
    plt.gca().xaxis.major.formatter.set_scientific(False) 
    plt.gca().xaxis.major.formatter.set_powerlimits((-2,13)) 
    locs,labels = plt.xticks() 
    plt.xticks(locs, map(lambda x: "%12.0f" % x, locs)) 
    plt.axis([x[0], x[-1],0,6.5]) 
    plt.xticks(rotation=20) 
    plt.xlabel('Date [YYYYMMDDhhmm]') 
    fig.subplots_adjust(bottom=0.2) 
    # plt.legend(loc=3) 

    plt.gcf().autofmt_xdate() 
    plt.savefig("/path/to/my/public_html/speed.png") 

main() 

在結束這產生這樣的曲線圖: the plot

時間軸沒有很好地配置。 : - /週期性出現的差距是因爲每小時沒有60-99分鐘的事實。

有沒有一些優雅的方式來完成這一點?也許準備好去模塊? ;-)

+2

更換繪製之前解析日期'datetime'對象。 'x + = [datetime.strptime(row [0],'%Y%m%d%H%M%S')]' –

+0

@ViktorKerkez:好的,插入'import datetime'並替換您的建議。得到錯誤'AttributeError:'模塊'對象沒有屬性'strptime''。 datetime應該是finde,因爲>>> >>> print(dt.date.today())2013-09-22'表現了預期的行爲。 –

+1

使用'from datetime import datetime'。該模塊有一些不幸的命名選擇。 – tacaswell

回答

3

Matplotlib接受datetime S,這樣你就可以

import datetime 
datetime.datetime.strptime(row[0], "%Y%m%d%H%M") 

解析時間,應該很好地工作。

格式選項將無法正常工作(.set_scientific(False))這樣一來,雖然和你

plt.xticks(locs, map(lambda x: "%12.0f" % x, locs)) 

應該像

import matplotlib.dates as mdates 
... 
plt.gca().xaxis.major.formatter = mdates.DateFormatter('%Y/%m/%d %H:%M') 
相關問題