0

この質問には 2 つの部分があります。他のソースを検索できない場合は、しばらくお待ちください。これは私の問題の一部です。

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

最後に、これは次のようなプロットを生成します。 プロット

時間軸がうまく構成されていません。:-/ 定期的に現れるギャップは、1 時間ごとに 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 に答える