Поместите легенду о панели панд с вторичной осью Y перед столбцами - PullRequest
6 голосов
/ 03 июля 2019

У меня есть пандас DataFrame со вторичной осью y, и мне нужен гистограмма с легендой перед столбцами.В настоящее время один набор баров находится перед легендой.Если возможно, я также хотел бы разместить легенду в левом нижнем углу.Любые идеи приветствуются!

Я попытался установить легенду = false и добавить собственную легенду, но у нее та же проблема.Я попытался изменить порядок столбцов, но на графике нет места для этого.

import pandas as pd
import matplotlib.pyplot as plt

df_y = pd.DataFrame([['jade',12,800],['lime',12,801],['leaf',12,802], 
       ['puke',12,800]], columns=['Territory','Cuisines','Restaurants'])
df_y.set_index('Territory', inplace=True)

plt.figure()
ax=df_y.plot(kind='bar', secondary_y=['Restaurants'])
ax.set_ylabel('Cuisines')
ax.right_ax.set_ylabel('Restaurants')
plt.show()

Один набор столбцов отображается за легендой, а один - перед легендой.Ссылка ниже идет на изображение, показывающее проблему.Спасибо!

link to image

1 Ответ

3 голосов
/ 03 июля 2019

Вы можете создать легенду самостоятельно.

Используйте циклический преобразователь цвета, чтобы получить правильные цвета при застегивании со столбцами.Обязательно установите legend=False в барплоте.loc=3 - левый нижний угол.

import matplotlib.patches as mpatches
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
df_y.plot(kind='bar', secondary_y=['Restaurants'], legend=False, ax=ax)
ax.set_ylabel('Cuisines')
ax.right_ax.set_ylabel('Restaurants')

L = [mpatches.Patch(color=c, label=col) 
     for col,c in zip(df_y.columns, plt.rcParams['axes.prop_cycle'].by_key()['color'])]

plt.legend(handles=L, loc=3)
plt.show()

enter image description here

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