Удаление дубликатов легендарного сюжета matplotlib - PullRequest
0 голосов
/ 23 января 2020

Я хочу отредактировать легенду, чтобы она отображала метки только один раз, когда я использую l oop для создания гистограммы. Как удалить дублирующую легенду? Она должна показывать неделю и месяц только один раз

Этот код дает мне график ниже

fig, ax = plt.subplots(figsize = (10,6))
ax.set(xlim=(0,6))
ax.set(ylim=(0,150))
ax.set_xticklabels(edgeslist)

for i in range(6):
    plt.bar(x = i, data = classw.iloc[:,i], 
            height = len(classw.iloc[:,i]) - classw.iloc[:,i].isna().sum(), 
            color = (0.91, 0.1, 0.4, 1), label = 'week',
            align = 'edge', width = -0.4)
    plt.bar(x = i, data = classm.iloc[:,i], 
            height = len(classm.iloc[:,i]) - classm.iloc[:,i].isna().sum(), 
            color = 'blue', label = 'month',
            align = 'edge', width = 0.4)

plt.legend()

enter image description here

Ответы [ 2 ]

1 голос
/ 23 января 2020

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

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Patch

r = Patch(facecolor=(0.91,0.1,0.4,1.0), label='week')
b = Patch(facecolor='blue', label='month')

plt.legend(handles=[r,b])
plt.show()

, который даст вам легенду, подобную этой

enter image description here

См. на этой странице для получения дополнительной информации о создании пользовательских легенд.

1 голос
/ 23 января 2020

Метод 1 Вы можете установить легенду внутри l oop, только если выполняется условие:

fig, ax = plt.subplots(figsize = (10,6))
ax.set(xlim=(0,6))
ax.set(ylim=(0,150))
ax.set_xticklabels(edgeslist)

for i in range(6):
    plt.bar(x = i, data = classw.iloc[:,i], 
            height = len(classw.iloc[:,i]) - classw.iloc[:,i].isna().sum(), 
            color = (0.91, 0.1, 0.4, 1), label = 'week',
            align = 'edge', width = -0.4)
    plt.bar(x = i, data = classm.iloc[:,i], 
            height = len(classm.iloc[:,i]) - classm.iloc[:,i].isna().sum(), 
            color = 'blue', label = 'month',
            align = 'edge', width = 0.4)
     if i==0:
        ax.legend()

Метод 2 Вы можете создать list с названием ярлыка. Вам будет присвоено значение None, но одно значение, затем в коде графика вы индексируете список меток следующим образом.

fig, ax = plt.subplots(figsize = (10,6))
ax.set(xlim=(0,6))
ax.set(ylim=(0,150))
ax.set_xticklabels(edgeslist)

label_week = [None]*6
label_week[5] = 'week'

label_month = [None]*6
label_month[5] = 'month'

for i in range(6):
    plt.bar(x = i, data = [1, 2, 5, 6, 0, 1], 
            height = 5, 
            color = (0.91, 0.1, 0.4, 1), label = label_week[i],
            align = 'edge', width = -0.4)
    plt.bar(x = i, data = [1, 2, 5, 6, 0, 1], 
            height = 6, 
            color = 'blue', label = label_month[i],
            align = 'edge', width = 0.4)

plt.legend()

Надеюсь, это поможет.

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