0

这个问题有两个部分。如果它缺乏对其他来源的搜索,请耐心等待。这是我的问题的一部分。

我使用tespeed生成的数据编写了一个脚本。数据的格式为“YYYYMMDDhhmm,down rate, up rate,unit,server”(hh:mm of ...)。

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()

最后,这会产生这样的情节: 剧情

时间轴配置不好。:-/ 周期性出现的间隙是因为每小时没有 60 - 99 分钟。

有什么优雅的方法可以做到这一点吗?也许是一个准备好的模块?;-)

4

1 回答 1

3

Matplotlib 接受datetimes,因此您可以使用

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')
于 2013-09-22T14:41:18.890 回答