Python рисует накопительный сюжет (matplotlib) - PullRequest
0 голосов
/ 06 октября 2010

Я не использовал matplotlib, но, похоже, это основная библиотека для рисования графиков.Я хочу нарисовать график использования процессора.У меня есть фоновые процессы каждую минуту, делая запись (дата, min_load, avg_load, max_load).дата может быть отметкой времени или хорошей форматированной датой.

Я хочу нарисовать диаграмму, которая показывает min_load, avg_load и max_load на одном графике.На оси X я бы хотел указать минуты, часы, дни, недели в зависимости от объема данных.

Возможны пробелы.Скажем, отслеживаемый процесс завершается сбоем, и, поскольку никто не перезапускает его, в течение нескольких часов могут быть пропуски.

Пример того, как я это представляю: http://img714.imageshack.us/img714/2074/infoplot1.png Это не иллюстрирует пропуски, но в этой ситуации показанияперейдите к 0.

Я сейчас играю с matplotlib и постараюсь поделиться своими результатами.Вот как могут выглядеть данные:

1254152292;0.07;0.08;0.13
1254152352;0.04;0.05;0.10
1254152412;0.09;0.10;0.17
1254152472;0.28;0.29;0.30
1254152532;0.20;0.20;0.21
1254152592;0.09;0.12;0.15
1254152652;0.09;0.12;0.14
1254152923;0.13;0.12;0.30
1254152983;0.13;0.25;0.32

Or it could look something like this:
Wed Oct 06 08:03:55 CEST 2010;0.25;0.30;0.35
Wed Oct 06 08:03:56 CEST 2010;0.00;0.01;0.02
Wed Oct 06 08:03:57 CEST 2010;0.00;0.01;0.02
Wed Oct 06 08:03:58 CEST 2010;0.00;0.01;0.02
Wed Oct 06 08:03:59 CEST 2010;0.00;0.01;0.02
Wed Oct 06 08:04:00 CEST 2010;0.00;0.01;0.02
Wed Oct 06 08:04:01 CEST 2010;0.25;0.50;0,75
Wed Oct 06 08:04:02 CEST 2010;0.00;0.01;0.02

-david

1 Ответ

2 голосов
/ 06 октября 2010

Попробуйте:

from matplotlib.dates import strpdate2num, epoch2num
import numpy as np
from pylab import figure, show, cm

datefmt = "%a %b %d %H:%M:%S CEST %Y"
datafile = "cpu.dat"

def parsedate(x):
    global datefmt
    try:
        res = epoch2num( int(x) )
    except:
        try:
            res = strpdate2num(datefmt)(x)
        except:
            print("Cannot parse date ('"+x+"')")
            exit(1)
    return res

# parse data file
t,a,b,c = np.loadtxt(
    datafile, delimiter=';',
    converters={0:parsedate},
    unpack=True)

fig = figure()
ax = fig.add_axes((0.1,0.1,0.7,0.85))
# limit y axis to 0
ax.set_ylim(0);

# colors
colors=['b','g','r']
fill=[(0.5,0.5,1), (0.5,1,0.5), (1,0.5,0.5)]

# plot
for x in [c,b,a]:
    ax.plot_date(t, x, '-', lw=2, color=colors.pop())
    ax.fill_between(t, x, color=fill.pop())

# legend
ax.legend(['max','avg','min'], loc=(1.03,0.4), frameon=False)

fig.autofmt_xdate()
show()

Это анализирует строки из файла "cpu.dat". Дата анализируется функцией parsedate.

Matplotlib должен найти лучший формат для оси x.

Редактировать: Добавлены легенда и fill_between (возможно, есть лучший способ сделать это).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...