2017-06-29 3 views
0

Ich habe einen Datensatz, der mehrere Labels haben. Ich möchte ein Facetgrid von Streudiagrammen mit Pandas und Seaborn erstellen. Außerdem hat dieser Datensatz einen anderen Ursprung, den ich auch vergleichen möchte. (Dies könnte zum Beispiel die Vorhersage verschiedener ML-Algorithmen und die echte Markierung in zwei Kurven nebeneinander sein). Die Handlung ich will, ist so etwas wie dies mit Platz für mehr Methoden und Etikettierungen:Wie man Pandas Multilabel Data Scatterplots in Seaborn mit Facetgrid plotten?

enter image description here

Hier ist die rechte Spalte ist die erste Markierung und die linke Seite ist die zweite.

Momentan sieht mein Pandas Datenrahmen wie folgt aus: l1, l2, methode, x, y. Wo l1 und l2 sind die verschiedenen Bezeichnungen. Ich kann eine Spalte mit dem folgenden Code plotten:

g = sns.FacetGrid(df, row='method', hue='l1') 
g.map(plt.scatter, 'x', 'y') 
sns.plt.show() 

Aber wie bekomme ich die zweite Spalte? Die intuitive Sache wäre, den Farbtonparameter eine Liste zu haben, aber das funktioniert nicht.

+1

Sie werden vielleicht http lesen wollen: // vita .had.co.nz/papers/tidy-data.html – mwaskom

Antwort

1

Ich glaube, Sie müssen Ihre Datenrahmen ändern:

l1_df = df[['l1','method','x','y']] 
l1_df['label_type'] = 'l1' 
l1_df.rename(columns={'l1':'label'}, inplace=True) 

l2_df = df[['l2','method','x','y']] 
l2_df['label_type'] = 'l2' 
l2_df.rename(columns={'l2':'label'}, inplace=True) 

df = pd.concat([l1_df,l2_df]) 

dann die wirklich intuitive Option verwenden, col vom docs:

g = sns.FacetGrid(df, row='method', col='label_type', hue='label') 
g.map(plt.scatter, 'x', 'y') 
sns.plt.show() 
+0

Funktioniert! Aber mit dem obigen Code dupliziere ich die x, y Daten, um die verschiedenen Beschriftungen entlang der Spalten zu zeichnen. –

+0

Ja, aber willst du das nicht? Ihr Beispielplot besteht aus doppelten XY-Daten. Ich dachte, das Ziel war es, die exakt gleichen Plots Seite an Seite mit verschiedenen Farbtönen zu erzeugen, die die verschiedenen Bezeichnungen der vorhergesagten und wahren Mengen für diese (x, y) -Koordinaten in jeder Methode anzeigen. Wenn Sie weiterhin eine Analyse der Rohdaten durchführen möchten, können Sie den verketteten Datenrahmen immer über 'new_df = pd.concat ([l1_df, l2_df])' zu einem neuen Objekt machen, so dass Sie 'df' noch verwenden können mit. – jack6e

+0

Korrigieren. Es scheint mir jedoch falsch zu sein, jede Instanz für jedes zusätzliche Label zu duplizieren, nur um Multi-Label-Daten plotten zu können. Oder ist mein Verständnis der Datendarstellung in Pandas begrenzt? –

Verwandte Themen