2015-01-19 3 views
8

Ho un set di dati di 5000 prodotti con 50 funzionalità. Una delle colonne è "colors" e ci sono più di 100 colori nella colonna. Sto cercando di tracciare un grafico a barre per mostrare solo i 10 colori principali e quanti prodotti ci sono in ogni colore.Grafici a barre ordinati con panda/matplotlib o seaborn

top_colors = df.colors.value_counts() 
top_colors[:10].plot(kind='barh') 
plt.xlabel('No. of Products'); 

Pandas Plot

Utilizzando Seaborn:

sns.factorplot("colors", data=df , palette="PuBu_d"); 

Seaborn

1) C'è un modo migliore per fare questo?

2) Come posso replicarlo con Seaborn?

3) Come faccio a tracciare in modo tale che il conteggio più alto è nella parte superiore (cioè nero in cima del grafico a barre)

risposta

7

Un semplice trucco potrebbe essere quello di invertire l'asse Y del vostro trama, piuttosto che futzing con i dati:

s = pd.Series(np.random.choice(list(string.uppercase), 1000)) 
counts = s.value_counts() 
ax = counts.iloc[:10].plot(kind="barh") 
ax.invert_yaxis() 

enter image description here

Seaborn barplot fa barre attualmente non supporta orizzontale orientati, ma se si desidera controllare l'ordine delle barre appaiono in È possibile passare un elenco di valori al x_order param. Ma penso che sia più facile usare i metodi di tracciamento dei panda qui, comunque.

+0

Fantastico! Grazie Michael, funziona perfettamente. Amo il tuo lavoro. @msaskom – ananuc

+0

roba buona. e pensare di aver smistato i miei dati per tutto questo tempo :) – atkat12

1

Se si desidera utilizzare i panda allora si può Ordina:

top_colors[:10].sort(ascending=0).plot(kind='barh') 

Seaborn già stili vostra trame panda, ma è anche possibile utilizzare:

sns.barplot(top_colors.index, top_colors.values) 
+0

Grazie. Per chiarire, i colori sono 1 delle colonne. Quindi la tua risposta traccerà l'intero set di dati anziché solo la colonna dei colori. Ho provato df.colors [: 10] .sort (ascending = 0) .plot (kind = 'barh'), non ha funzionato. Lo stesso per Seaborn. Qualche idea? – ananuc

+0

scusate volevo dire "top_colors", vedere la mia risposta modificata. – elyase

+0

Trovato l'errore: "AttributeError: 'NoneType' l'oggetto non ha attributo 'trama'". Seaborn non sembra funzionare in questo caso. – ananuc