Я недавно изучаю 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()
Результат, который я получил ниже:
Проблема, с которой я столкнулся:
Когда я впервые запускаю этот сценарий, он еще не сработает в виде гистограммы, поскольку ожидает добавления новой строки в файл журнала («somelog.log»).Как только он обнаруживает добавленную новую линию, он вызывает сюжет (как прикреплено на рис.).Однако, когда еще одна новая строка добавляется в somelog.log, она не обновляет динамически общее количество.(Я ожидаю, что общее число изменится со 129 до 130 в последней дате, показанной на этом рисунке)
Может кто-нибудь сообщить мне, в чем дело?