Установка меток легенды для дат в Python - PullRequest
3 голосов
/ 01 мая 2020

Короче говоря, у меня есть (на пару дней) значения глюкозы, нанесенные на график с их временными метками. Я написал функцию, которая затем накладывает значения глюкозы на одну и ту же ось X, чтобы я мог искать тренды глюкозы. В конечном итоге это означает, что данные по глюкозе за пару дней представлены разными линиями, что приводит к приведенному ниже графику:

enter image description here

В настоящее время на этикетке написано «Чтение глюкозы» для каждого цвета. Я хочу установить метку таким образом, чтобы при построении данных отображались даты (2019-11-21, 2019-11-22) и так далее. Я действительно не уверен, как это сделать, так как я никогда не имел дело с легендами Matplotlib ниже, и я не мог найти какие-либо полезные решения.

Любое руководство будет высоко ценится!

РЕДАКТИРОВАТЬ 1:

Я использую pandas dataframe. Пример минимального кода - моя легенда расположена в функции построения графика следующим образом:

def plotting_function(x, y, isoverlay = False):

    years_fmt = mdates.DateFormatter(' %H:%M:%S')
    ax = plt.axes()
    ax.xaxis.set_major_formatter(years_fmt)
    dates = [date.to_pydatetime() for date in x]

    if isoverlay:
        plt.plot(x, y, label= "Glucose reading" )
    else:
        plt.plot(x, y, 'rs:', label="Glucose reading")

    plt.xlabel("Time of readings")
    plt.ylabel("Glucose readings in mmol/L")

    plt.legend(ncol=2)
    plt.title("Glucose readings plotted against their timestamps")

1 Ответ

1 голос
/ 02 мая 2020

В функции построения графика вы можете добавить список меток для легенды в качестве дополнительного параметра и присвоить его plt.legend().

Вот минимальный пример, чтобы показать, как это может работать:

import numpy as np
import matplotlib.pyplot as plt

def plotting_function(x, y, labels):
    plt.plot(x, y)
    plt.legend(labels, ncol=2)

N = 100
K = 9
x = np.arange(N)
y = np.random.normal(.05, .2, (N, K)).cumsum(axis=0) + np.random.uniform(1, 10, K)
labels = [f'label {i + 1}' for i in range(K)] # as a test: ['label 1', 'label 2' ,...]
# labels = ['2019-11-21', '2019-11-22', ...] # this is another example, how dates could be used
plotting_function(x, y, labels)

example plot

...