2016-05-05 11 views
1

Ich möchte ein Streudiagramm einer Wellenlänge (float) in y-Achse und Spektralklasse (Liste von Zeichen/String) in X-Achse, Beschriftungen = ['B', 'A' , 'F', 'G', 'K', 'M']. Daten werden in Pandas Datenrahmen, df gespeichert.Streudiagramm mit benutzerdefinierten Ticks

df['Spec Type Index'] 
0  NaN 
1  A 
2  G 
.  . 
.  . 
167  K 
168 Nan 
169  G 

Dann

df['Disk Major Axis "'] 
0  4.30 
1  4.50 
2  22.00 
.   . 
.   . 
167  1.32 
168  0.28 
169  25.00 

So dachte ich, das einfach mit

plt.scatter(df['Spec Type Index'], df['Disk Major Axis "']) 

Aber ich bekomme

diesen ärgerlichen Fehler gemacht werden soll

konnte nicht konvertieren Zeichenfolge Schwimmer: 'G'

Nachdem ich dies behoben habe, möchte ich benutzerdefinierte xticks wie folgt machen. Aber wie kann ich

labels = ['B','A','F','G','K','M'] 
ticks = np.arange(len(labels)) 
plt.xticks(ticks, labels) 

Antwort

0

Erstens glaube ich, Sie diese Zeichenfolgen auf ganze Zahlen abzubilden, dann können matplotlib entscheiden, wo diese Punkte zu platzieren.

labels = ['B','A','F','G','K','M'] 
mapping = {'B': 0,'A': 1,'F': 2,'G': 3,'K': 4,'M': 5} 
df = df.replace({'Spec Type Index': mapping}) 

dann die Streudiagramm,

fig, ax = plt.subplots() 
ax.scatter(df['Spec Type Index'], df['Disk Major Axis "']) 

Schließlich

ax.set_xticklabels(labels)