Использование легенды в живом графике - PullRequest
0 голосов
/ 27 марта 2020

У меня есть живой график, который обновляет и сохраняет количество данных, которое я хочу. Все работает, как я хочу, но чтение графика может быть трудным, как я могу добавить легенду к этому так, чтобы это было для меня? Я включил один маркер в одну строку, и, как вы увидите, если вы запустите мой код, он добавляет новую запись в легенду при каждом обновлении. Я просто хочу, чтобы каждый элемент был добавлен один раз, тогда легенда останется прежней c

Это мой код:

from matplotlib import pyplot
from matplotlib.animation import FuncAnimation
import pandas as pd
from datetime import datetime
import threading
import random
import time
measurements = ['abc','bcd','afr','reg','wow']
counter = 0
figure = pyplot.figure()
measurement_frame = pd.DataFrame(index = measurements)
def get_live(counter2, col_num):
    measurement_frame.iat[counter2,col_num] = random.randint(50,80)
def add_to_dataframe():
    global measurement_frame
    timey = datetime.now().time()
    if measurement_frame.shape[1] == 80:
        time.sleep(4)
        measurement_frame.drop(measurement_frame.columns[0], axis = 1, inplace = True)
    measurement_frame[timey] = measurements
    col_num = measurement_frame.shape[1]-1
    counter2 = 0
    for item in measurements:
        t = threading.Thread(target=get_live, args=(counter2, col_num,))
        t.start()
        counter2 = counter2 +1
    t.join()
def update(frame):
    add_to_dataframe()
    x_data = measurement_frame.columns
    y1_data = measurement_frame.loc[measurement_frame.index[0]]
    y2_data = measurement_frame.loc[measurement_frame.index[1]]
    y3_data = measurement_frame.loc[measurement_frame.index[2]]
    y4_data = measurement_frame.loc[measurement_frame.index[3]]
    y5_data = measurement_frame.loc[measurement_frame.index[4]]
    line, = pyplot.plot_date(x_data, y1_data, '-', color = 'b', label = measurements[0])
    line2, = pyplot.plot_date(x_data, y2_data, '-', color = 'g')
    line3, = pyplot.plot_date(x_data, y3_data, '-', color = 'r')
    line4, = pyplot.plot_date(x_data, y4_data, '-', color = 'm')
    line5, = pyplot.plot_date(x_data, y5_data, '-', color = 'y')
    line.set_data(x_data, y1_data)
    line2.set_data(x_data, y2_data)
    line3.set_data(x_data, y3_data)
    line4.set_data(x_data, y4_data)
    line5.set_data(x_data, y5_data)
    figure.gca().set_xlim(left =x_data[0], right = datetime.now().time())
    return line, line2, line3, line4, line5,
animation = FuncAnimation(figure, update, interval=300)
pyplot.show()

1 Ответ

2 голосов
/ 28 марта 2020

В этом случае я думаю, что лучше создать легенду вручную, а не использовать автоматический поиск c помеченных художников. Примерно так

from matplotlib.lines import Line2D
colors = ['b', 'g', 'r', 'm', 'y']
labels = ['1', '2', '3', '4', '5']
handles = [Line2D([], [], color=c, label=l) for c, l in zip(colors, labels)]
plt.legend(handles=handles)

снаружи функция update.

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