Pandas Подграфик Groupby Dataframe - Цвет по группам - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь создать подзаголовок сетки 2 на 2 для построения следующего фрейма данных. Я хотел бы раскрасить линии на каждом подзаголовке по соответствующей категории группы, и легенда должна быть помечена этим именем группы. Это то, что у меня есть до сих пор, что дает мне 4 подсюжета в сетке 2 на 2. Однако все линии на конкретном подзаголовке отображаются одним цветом, а легенда - это просто имя столбца.

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
font = {'family' : 'normal',
        'weight' : 'bold',
        'size'   : 22}

mpl.rc('font', **font)
data = {'Date' : [2008, 2009, 2010, 2011, 2012,
                  2008, 2009, 2010, 2011, 2012,
                  2008, 2009, 2010, 2011, 2012,
                  2008, 2009, 2010, 2011, 2012],
        'GRP' : ['M1', 'M1', 'M1', 'M1', 'M1',
                   'M2', 'M2', 'M2', 'M2', 'M2',  
                   'M3', 'M3', 'M3', 'M3', 'M3', 
                   'M4', 'M4', 'M4', 'M4', 'M4'],
        'GR' : [2, 4, 6, 8, 10,
                12, 14, 16, 18, 20,
                22, 24, 26, 28, 20,
                23, 34, 36, 38, 10],
        'OR' : [12, 14, 16, 18, 29,
                112, 114, 116, 118, 219,
                222, 214, 216, 218, 229,
                412, 414, 416, 418, 429],
        'WR' : [23, 56, 69, 92, 115,
                123, 156, 169, 192, 215,
                223, 256, 269, 292, 315,
                323, 356, 369, 392, 415],
        'LR' : [42, 59, 90, 100, 12,
                142, 159, 190, 110, 112,
                242, 259, 290, 300, 212,
                342, 359, 390, 400, 512]}
df = pd.DataFrame(data)

print (df)

fig, axes = plt.subplots(nrows = 2, ncols = 2,
                            sharex = True, sharey = False, 
                            figsize = (10,10))
axes_list = [item for sublist in axes for item in sublist] 

df.groupby('GRP').plot(kind = 'line', x = 'Date', y = ['GR', 'OR', 'WR', 'LR'],
                             subplots = True, drawstyle = 'default', marker = 'o',
                             ax = axes_list,
                             layout = (2,2))

plt.tight_layout()
plt.show()
...