2016-10-06 2 views
6

Ich versuche, ein Pandas groupby Objekt zu zeichnen den Code mit fil.groupby('imei').plot(x=['time'],y = ['battery'],ax=ax, title = str(i))Pandas groupby Objekt in der Legende auf der Parzelle

Das Problem ist die Plotlegende Listen ['battery'] als Legende Wert. Wenn für jedes Objekt im Objekt groupby eine Linie gezeichnet wird, ist es sinnvoller, diese Werte stattdessen in der Legende zu zeichnen. Ich bin mir jedoch nicht sicher, wie ich das machen soll. Jede Hilfe wäre willkommen.

Daten

    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 

Voll Code

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() 

Aktuelle Grundstück

enter image description here

+2

Können Sie ein Beispiel Datenrahmen erstellen, die als Eingabe f verwendet wird, oder die groupby Methode? –

+0

Was ist 'fil.imei'? Was passiert, wenn Sie einfach 'ax.legend()' machen? –

+0

Die Antwort ist so sauber wie es sein sollte - wenn Sie etwas sauberer Pandasyntax verwenden. Huh. – cphlewis

Antwort

7

leicht in Ordnung gebracht Daten:

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 

kompletter Beispielcode:

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() 

Die x-Werte in Datetime konvertiert werden müssen für das Plotten rechts, wie gewohnt zu kommen. Das könnte man auch im Datenrahmen tun.

Ergebnis, von IMEI gekennzeichnet:

enter image description here (HINWEIS:. Bearbeitete ich über das erste Mal stolperte los eine Kuriosität zu bekommen Wenn Sie eine Liste als y Argument group.plot übergeben, wird die Liste IDs sein wie die Linie Etiketten, vermutlich als handlicher Standard verwendet, wenn Sie mehrere abhängige Variablen auf einmal sind Plotten.

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

)

Verwandte Themen