matplotlib без использования функции анимации - PullRequest
0 голосов
/ 30 мая 2018

Я недавно изучаю python, как использовать matplotlib.Моя цель - использовать matplotlib для динамического отображения графика, читая файл ("somelog.log").Если в этот файл журнала добавлена ​​новая строка, обновите общее количество гистограмм, отражающих сегодняшнюю дату.

import matplotlib.pyplot as plt
import numpy as np
proddict = {}
prodlist = []
f = open ("somelog.log", 'r') 
f.seek(0, os.SEEK_END) # read end of file

loop=True

while loop:
    line = f.readline()
    if not line: # if we don't get any data
        time.sleep(0.1)
        continue   #retry
    else:
        with open ("somelog.log", 'r') as f:
            for line in f:
                matches = re.findall(r'(\d+[-]\d+[-]\d+)', line)
                for match in matches:
                    count = proddict.get(match,0) 
                    proddict[match] = count + 1
        for k,v in proddict.iteritems():
            prodlist.append((k,v))
        prodlist = sorted(prodlist)
        plt.ion()
        W = np.arange(len(prodlist))
        xs = []
        ys = []
        for x,y in prodlist:
            xs.append(x)
            ys.append(y)
        plt.draw()
        rects1 = plt.bar(W, ys, color='green', align= 'center') 
        for rect in rects1:
            height = rect.get_height()
            plt.text(rect.get_x() + rect.get_width()/2., 1.05*height, '%d' % int(height),ha='center', va='bottom')
            plt.draw()

        plt.xticks(W, xs, rotation='vertical') 
        plt.title(' number of scripts executed (realtime)')
        plt.xlabel('Date')
        plt.ylabel('Usage')
        plt.grid(True)
        plt.ylim(0,500) # that's the limit
        plt.legend(loc=0)

        plt.show()

Результат, который я получил ниже:

script output

Проблема, с которой я столкнулся:

Когда я впервые запускаю этот сценарий, он еще не сработает в виде гистограммы, поскольку ожидает добавления новой строки в файл журнала («somelog.log»).Как только он обнаруживает добавленную новую линию, он вызывает сюжет (как прикреплено на рис.).Однако, когда еще одна новая строка добавляется в somelog.log, она не обновляет динамически общее количество.(Я ожидаю, что общее число изменится со 129 до 130 в последней дате, показанной на этом рисунке)

Может кто-нибудь сообщить мне, в чем дело?

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