Как правильно добавить оттенок Seaborn на мой график? - PullRequest
0 голосов
/ 29 января 2019

У меня есть очень простой фрейм данных из двух человек:

И я хочу построить это с правильным оттенком, чтобы сгенерировать легенду

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

d = {"John":[43, 23, 12], "Mary":[24, 53, 32],"Trial_#":[1,2,3]}
df = pd.DataFrame(data=d)
fig = sns.pointplot(x='Trial_#', y='John',
data = df)
fig = sns.pointplot(x='Trial_#', y='Mary',
data = df)

sns.set_context("notebook", font_scale=1)
fig.set(ylabel="Guess")
fig.set(xlabel="Trial")
plt.show()

Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Использование matplotlib

Ключ должен был бы установить индекс для столбца номера испытания, чтобы оставшиеся столбцы содержали значения, которые должны быть нанесены на график.Затем фрейм данных может быть напрямую передан функции plot в matplotlib.Небольшим недостатком является то, что легенда должна создаваться индивидуально.

import matplotlib.pyplot as plt
import pandas as pd

d = {"John":[43, 23, 12], "Mary":[24, 53, 32], "Trial_#":[1,2,3]}
df = pd.DataFrame(data=d)
df = df.set_index("Trial_#")

lines = plt.plot(df, marker="o")
plt.ylabel("Guess")
plt.legend(lines, df.columns)

plt.show()

enter image description here

Использование панд

Вы можете напрямую строить с помощью пандПреимущество которого заключается в бесплатной легенде.

import matplotlib.pyplot as plt
import pandas as pd

d = {"John":[43, 23, 12], "Mary":[24, 53, 32], "Trial_#":[1,2,3]}
df = pd.DataFrame(data=d)

ax = df.set_index("Trial_#").plot(marker="o")
ax.set(ylabel="Guess")

plt.show()

enter image description here

Использование Seaborn

Наиболее сложным решением являетсяс Сиборном.Seaborn работает с длинными формами данных.Чтобы преобразовать широкоформатный фрейм данных в длинный фрейм данных, вы можете использовать pandas.melt.Результирующий длинный кадр затем содержит столбец с именами в нем;они могут использоваться как переменная hue в морском заливе.

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

d = {"John":[43, 23, 12], "Mary":[24, 53, 32], "Trial_#":[1,2,3]}
df = pd.DataFrame(data=d)

dfm = pd.melt(df, id_vars=['Trial_#'], value_vars=['John', 'Mary'], 
                  var_name="Name", value_name="Guess")
ax = sns.pointplot(x='Trial_#', y='Guess', hue="Name", data = dfm)

plt.show()

enter image description here

0 голосов
/ 29 января 2019

Если вы можете использовать matplotlib в качестве альтернативы seaborn pointplot, вы можете просто сделать следующее

import matplotlib.pyplot as plt
import pandas as pd

fig, ax = plt.subplots()
d = {"John":[43, 23, 12], "Mary":[24, 53, 32],"Trial_#":[1,2,3]}
df = pd.DataFrame(data=d)

ax.plot(df['Trial_#'], df['John'], '-ro', label="John")
ax.plot(df['Trial_#'], df['Mary'], '-go',  label="Mary")

ax.set(ylabel="Guess")
ax.set(xlabel="Trial")
ax.legend()

enter image description here

...