2016-10-06 22 views
6

Usiłuję wykreślić pandy groupby obiektu przy użyciu kodu fil.groupby('imei').plot(x=['time'],y = ['battery'],ax=ax, title = str(i))Pandy GroupBy obiektu w legendzie na działce

Problemem jest działka listy legenda ['battery'] jako wartość legendy. Biorąc pod uwagę, że rysuje linię dla każdego przedmiotu w obiekcie groupby, bardziej sensowne jest wykreślenie tych wartości w legendzie. Jednak nie jestem pewien, jak to zrobić. Każda pomoc będzie doceniona.

danych

    time    imei battery_raw 
0 2016-09-30 07:01:23 862117020146766  42208 
1 2016-09-30 07:06:23 862117024146766  42213 
2 2016-09-30 07:11:23 862117056146766  42151 
3 2016-09-30 07:16:23 862117995146745  42263 
4 2016-09-30 07:21:23 862117020146732  42293 

Pełny kod

for i in entity: 
    fil = df[(df['entity_id']==i)] 
    fig, ax = plt.subplots(figsize=(18,6)) 
    fil.groupby('imei').plot(x=['time'],y = ['battery'],ax=ax, title = str(i)) 
    plt.legend(fil.imei) 
    plt.show() 

Aktualny działka

enter image description here

+2

mógłbyś pisać przykładowy dataframe, który jest używany jako wejście f lub metodą groupby? –

+0

co to jest "fil.imei"? co się stanie, jeśli po prostu wykonasz 'ax.legend()'? –

+0

Odpowiedź jest tak czysta, jak być powinna - jeśli użyjesz nieco czystszej składni pandy. Huh. – cphlewis

Odpowiedz

7

Lekko uporządkowane dane:

date   time    imei  battery_raw 
0 2016-09-30 07:01:23 862117020146766  42208 
1 2016-09-30 07:06:23 862117020146766  42213 
2 2016-09-30 07:11:23 862117020146766  42151 
3 2016-09-30 07:16:23 862117995146745  42263 
4 2016-09-30 07:21:23 862117995146745  42293 

Kompletny przykładowy kod:

import matplotlib.pyplot as plt 

fil = pd.read_csv('imei.csv', sep=r'\s*', engine='python') 
fig, ax = plt.subplots(figsize=(18,6)) 

for name, group in fil.groupby('imei'): 
    group.plot(x=pd.to_datetime(group['time']), y='battery_raw', ax=ax, label=name) 

plt.show() 

X-wartości muszą być konwertowane do datetime do kreślenia wyjdzie prawo, jak zwykle. Możesz to zrobić również w ramce danych.

rezultacie oznaczony przez IMEI:

enter image description here (UWAGA:. Edytowane aby pozbyć się osobliwość potknąłem się po raz pierwszy Jeśli przekazać listę jako y argument group.plot, że lista identyfikatorów będzie używane jako etykiety linii, przypuszczalnie jako poręczne domyślnie kiedy wykreślenie kilku zmiennych zależnych od razu.

#for name, group in fil.groupby('imei'): 
# group.plot(x=['time'], y=['battery_raw'], ax=ax, label=name) 

)

Powiązane problemy