Как показывать метки на графиках Seaborn (не найдены ручки с метками для надписи в легенде)? - PullRequest
0 голосов
/ 24 декабря 2018

Я пытался построить график с использованием seaborn, но метка не отображалась, даже если она была назначена объекту оси.

Как отобразить метку на графике?

Вот мой код:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

dx = pd.DataFrame({'c0':range(5), 'c1':range(5,10)})
dx.index = list('abcde')

ax = sns.pointplot(x=dx.index,
                y="c0",
                data=dx, color="r",
                scale=0.5, dodge=True,
                capsize=.2, label="child")
ax = sns.pointplot(x=dx.index,
                y="c1",
                data=dx, color="g",
                scale=0.5, dodge=True,
                capsize=.2, label="teen")
ax.legend()
plt.show()

Легенда дает ошибку: No handles with labels found to put in legend.

Ответы [ 3 ]

0 голосов
/ 25 декабря 2018

sns.pointplot() предназначен не только для отображения нескольких атрибутов фрейма данных на одном рисунке, но и для визуализации отношений между ними, в этом случае он будет генерировать свои собственные метки.Вы можете переопределить их, передав аргумент labels в ax.legend() (см. Добавить легенду к точечному графику Seaborn ), но как только вы внесете изменения в свой сюжет, есть вероятность, что будет какой-то беспорядок.

Чтобы создать ваши участки с использованием эстетики морских тканей, я бы сделал следующее:

sns.set_style("white")
fig, ax = plt.subplots()
plt.plot(dx.index, dx.c0, "o-", ms=3,
            color="r", label='child')
plt.plot(dx.index, dx.c1, "o-", ms=3,
            color="g", label='teen')
ax.legend()

Результат:

enter image description here

0 голосов
/ 25 декабря 2018

После некоторой практики я нашел решение, используя сами панды,

dx.plot(kind='line',marker='o',xticks=range(5))

Дает сюжет: enter image description here

0 голосов
/ 24 декабря 2018

В вашем случае ylabel уже установлен на c0, поэтому легенда не нужна.

Если вы настаиваете на легенде, я предлагаю не использовать sns.Вместо этого попробуйте это с помощью интерфейса pandas для matplotlib

dx = pd.DataFrame({'c0':range(5), 'c1':range(5,10)})
dx.set_index('c0').plot(marker='o', )

или используйте API matplotlib напрямую с большей гибкостью

plt.plot(dx.c0, dx.c1, marker='o', label='child')
plt.legend()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...