2015-02-10 13 views
16

Come posso ottenere i colori del mare quando si esegue un diagramma a dispersione?ciclo marino attraverso i colori con dispersione matplotlib

import matplotlib.pyplot as plt 
import seaborn as sns 
ax=fig.add_subplot(111) 
for f in files: 
    ax.scatter(args) # all datasets end up same colour 
    #plt.plot(args) # cycles through palette correctly 
+0

Questa è una 'possibilità', non un 'bug' 'scatter' è un' ScalarMappable' che significa che è possibile assegnare un valore scalare per ogni marcatore che sarà che essere utilizzata (insieme a una mappa a colori) per colora ciascun marker in base al valore scalare. Dato che avere la partecipazione di 'scatter' nel ciclo del colore, la logica sembra sciocca/troppo laboriosa. Come nota a margine, a meno che tu non stia variando la dimensione dei marker, è probabilmente meglio usare 'plot' senza linea (andrà più veloce). – tacaswell

+0

Grazie per il suggerimento sull'utilizzo della trama :) Non stavo suggerendo che fosse un bug, stavo solo chiedendo come farlo. – amn41

risposta

30

Devi dire a matplotlib quale colore usare. Per utilizzare, ad esempio, la tavolozza dei colori di default di Seaborn:

import matplotlib.pyplot as plt 
import seaborn as sns 
import itertools 
ax=fig.add_subplot(111) 

palette = itertools.cycle(sns.color_palette()) 

for f in files: 
    ax.scatter(args, color=next(palette)) 

Il itertools.cycle fa in modo che non a corto di colori e iniziare con la prima volta dopo aver utilizzato l'ultimo.

0

Per accrescere la risposta di Carsten, se si dispone di un numero elevato di categorie per l'assegnazione dei colori, è consigliabile comprimere i colori su una tavolozza mareggiata molto grande, ad esempio xkcd_palette o crayon_palette .. Si noti che questa pratica è solitamente a chartjunk anti-pattern: l'utilizzo di più di 5-6 colori è solitamente eccessivo e potrebbe essere necessario modificare il tipo di grafico.

import matplotlib.pyplot as plt 
import seaborn as sns 

palette = zip(df['category'].unique(), sns.crayons.values()) 
Problemi correlati