这个问题有两个部分。如果它缺乏对其他来源的搜索,请耐心等待。这是我问题的一部分。
我使用tespeed生成的数据编写了一个脚本。数据格式为“YYYYMMDDhhmm,下降率,上行率,单位,服务器”(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分钟。
有没有一些优雅的方法来实现这一目标?也许是准备好的模块? ; - )
答案 0 :(得分:3)
Matplotlib接受datetime
,因此您可以使用
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')