pandas python легенда не отображает все цветовые категории - PullRequest
1 голос
/ 06 апреля 2020

Я пытаюсь построить график, используя значения данных, у меня есть три столбца в кадре данных, первый столбец - это значения легенды графика, второй столбец - ось x, а третий столбец - ось y. Когда я строю график, он показывает мне только одну категорию в легенде, а не все, он показывает мне только один цвет

Это мой фрейм данных

enter image description here

Это мой код

ax1 = graphdf.plot(kind='bar', x='Bottles', y='bottle Avg')
figures = graphdf['fig'].tolist()
ax1.legend(labels=figures, fancybox=True, shadow=True)
for p in ax1.patches:
    label1 = "{:.1f}".format(p.get_height())
    ax1.annotate(label1, xy=(p.get_x() * 1.015, p.get_height() * 1.015))

, но в метке показаны только 1 категории, а не все.

Это вывод, я хочу показать все категории в Легенда

enter image description here

1 Ответ

0 голосов
/ 07 апреля 2020

В этом случае pandas.DataFrame.plot.bar вызывает matplotlib.pyplot.bar ровно один раз, создавая одну коллекцию патчей с одной меткой. Подпись matplotlib.axes.Axes.legend, в которой указаны только метки, просто присваивает метки « существующим элементам графика ». Поскольку plt.bar создает один «элемент сюжета», создается только одна запись легенды. Вы можете легко обойти это, используя третью подпись вызова для ax.legend, где и указаны метки и дескрипторы, то есть

ax = df.plot(kind='bar', x='Bottles', y='bottle Avg')
ax.legend(labels=df['fig'].tolist(), handles=ax.patches, fancybox=True, shadow=True)
for p in ax.patches:
    ax.annotate("{:.1f}".format(p.get_height()), xy=(p.get_x() * 1.015, p.get_height() * 1.015))

enter image description here

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