Ошибка в легенде при построении горизонтального барчарта (plt.barh)
Исходные данные
Датафрейм размером: 350677 rows × 20 columns. Колонки: курсы, модули в составе курсов, уроки в составе модулей, id студентов, их личные данные и прочее. В работе используется Jupyter Notebook, библиотеки Pandas, Numpy, Matplotlib.
Задача
Постройте горизонтальный bar-chart, отражающий количество студентов на каждом курсе. График должен иметь заголовок. Значения должны быть отсортированы. Цвет столбцов должен содержать информацию о сфере, к которой относится курс (то есть нужна легенда). Прозрачность должна стоять на отметке 0.1. На график должна быть нанесена линия медианы. У медианы должен быть свой цвет. Рамки у графика быть не должно
Проблема
Привожу код, который я использую
students_on_course = main.groupby('title').student_id.nunique()
my_color = matplotlib.colors.get_named_colors_mapping()
plt.figure(figsize=(15, 10))
plt.barh(students_on_course.index, students_on_course.sort_values(ascending=True),
color=list(my_color)[:14], alpha=0.1, label=students_on_course.index)
median_soc = int(students_on_course.median())
plt.axvline(x=median_soc, ls='--', color='blue', label='Медианная численность студентов')
plt.title('Количество студентов на курсах')
plt.yticks([])
plt.box(on=None)
plt.legend(loc='lower right')
plt.show()
Подскажите, пожалуйста, где ошибка? Почему в легенду не переносятся значения в соответствии с цветом?
Ответы (1 шт):
Попробуйте сделать так. Проще использовать Seaborn, он многое умеет "из коробки", в отличие от Matplotlib.
ax = plt.barh(students_on_course.index, students_on_course.sort_values(ascending=True),
color=list(my_color)[:14], alpha=0.1)
...
plt.legend(ax.patches,students_on_course.index, loc='lower right')
