pandas: Изображение множественных графиков
Есть подобная структура данных:
| g1 | g2 | x | y |
|---|---|---|---|
| A | c | 1 | 5 |
| A | c | 2 | 6 |
| A | c | 3 | 7 |
| A | c | 4 | 8 |
| A | d | 1 | 6 |
| A | d | 2 | 6 |
| A | d | 3 | 5 |
| A | d | 4 | 7 |
| B | c | 5 | 7 |
| B | c | 3 | 1 |
| B | c | 4 | 2 |
| B | c | 2 | 3 |
| B | d | 5 | 6 |
| B | d | 3 | 2 |
| B | d | 4 | 3 |
| B | d | 2 | 2 |
DF = pd.DataFrame({'g1': list('A'*8+'B'*8),
'g2': list('c'*4+'d'*4+'c'*4+'d'*4),
'x': list('1234'*2+'5342'*2),
'y': list('5678665771236232')})
Как без создания новых DF или столбцов построить линейные графики по группам из g1 и g2 на одной figure, с использованием метода DataFrame.plot? (с разной окраской, чтобы понять, что к чему)
Пробовал группировать, а потом unstack'ать в столбцы, но не ясно, как правильно указать, чтобы получить желаемое.
GB = DF.groupby(['g1', 'g2', 'x']).mean()
US = GB.unstack(level=['g1','g2'])
Пример ожидаемого результата: https://www.desmos.com/calculator/itt1w4eagt
Ответы (1 шт):
Автор решения: strawdog
→ Ссылка
В общем, если у вас есть желание что-то вывести из датафрейма всроенными методами на одну фигуру, то делаете так:
ax = df.plot()
# затем, при построении каждого графика добавляйте в plot аргумент `ax=ax`
df.plot(ax=ax)
Но я бы советовал работать напрямую с matplotlib, поскольку для более сложных построений так будет лучше:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
l=[]
for i, g in df.groupby(['g1', 'g2']):
g = g.sort_values('x')
ax.plot(g['x'],g['y'])
l.append(i)
ax.legend(l)
plt.show()
