2017-07-11 12 views
3

Hallo Ich habe folgenden Datenrahmen:Wie erstellt man ein x y Liniendiagramm mit Python?

df = [{'Column1': 1, 'Colunm2': 'A', 'Colunm3': 2}, 
     {'Column1': 2, 'Colunm2': 'A', 'Colunm3': 4}, 
     {'Column1': 3, 'Colunm2': 'A', 'Colunm3': 1}, 
     {'Column1': 1, 'Colunm2': 'B', 'Colunm3': 7}, 
     {'Column1': 2, 'Colunm2': 'B', 'Colunm3': 2}, 
     {'Column1': 3, 'Colunm2': 'B', 'Colunm3': 9}] 

Wie kann ich ein X-Y Grundstück zwischen Column1 machen und Colunm3 aber zwei diffentent Linien Plotten, einem für Wert Colunm2 = 'A' und andere für Werte Colunm2 ='B'?

+1

Was haben Sie versucht, so weit? Welche Werkzeuge verwendest du? https://stackoverflow.com/help/how-to-ask – patrick

Antwort

1

Sie können dies versuchen:

import matplotlib.pyplot as plt 

df = [{'Column1': 1, 'Colunm2': 'A', 'Colunm3': 2}, 
     {'Column1': 2, 'Colunm2': 'A', 'Colunm3': 4}, 
     {'Column1': 3, 'Colunm2': 'A', 'Colunm3': 1}, 
     {'Column1': 1, 'Colunm2': 'B', 'Colunm3': 7}, 
     {'Column1': 2, 'Colunm2': 'B', 'Colunm3': 2}, 
     {'Column1': 3, 'Colunm2': 'B', 'Colunm3': 9}] 

first = [(i["Column1"], i['Colunm3']) for i in df if i['Colunm2'] == 'A'] 
second = [(i["Column1"], i['Colunm3']) for i in df if i['Colunm2'] == 'B'] 


plt.plot([a for a, b in first], [b for a, b in first]) 
plt.plot([a for a, b in second], [b for a, b in second]) 

plt.show() 
3

IIUC:

import pandas as pd 
df1 = pd.DataFrame(df) 
fig,ax = plt.subplots() 
for i,g in df1.groupby('Colunm2'): 
    g.plot('Column1','Colunm3',ax=ax,label=i) 

enter image description here

+0

Dies ist eine vielseitige Antwort, die die Tatsache ausnutzt, dass das Plotten speziell für [groupby] (http://pandas.pydata.org/pandas-docs) implementiert ist /version/0.16.2/generated/pandas.core.groupby.DataFrameGroupBy.plot.html) Objekte. Der einzige Mangel meiner Ansicht (von Pandas, nicht von der Antwort) ist, dass Sie in der Lage sein sollten, eine Liste von Labels in einem Aufruf an '.plot' zu übergeben, dh' g.plot ('Column1', 'Colunm3', ax = ax, label = ['A', 'B']) '. –

+0

@BradSolomon Genau das können Sie mit Seaborn tun, indem Sie den Parameter 'hue' verwenden. –

+0

mit 'sns.lmplot'? –

2

Wie @ScottBoston es in seinem Kommentar darauf hingewiesen, ist auch sns.pointplot wo der hue Parameter effektiv ein gruppiere nach.

import sns.apiponly as sns 
sns.pointplot('Column1', 'Colunm3', data=DataFrame(df), hue='Colunm2') 
plt.ylabel('Colunm3') 

enter image description here

Verwandte Themen