2015-02-10 8 views
16

Wie kann ich Seaborn Farben erhalten, wenn ein Streudiagramm zu tun?Seaborn Zyklus durch Farben mit matplotlib Streu

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

Dies ist ein ‚Feature‘, kein ‚Fehler‘ 'scatter' ist ein' ScalarMappable', die bedeutet, dass Sie einen skalaren Wert zu jedem Marker zuweisen können, die werden als verwendet werden (zusammen mit einer Farbkarte) zu färbe jeden Marker entsprechend dem Skalarwert. Da, mit 'scatter' in der Farbzyklus Logik teilnehmen scheint dumm/zu fummelig. Als Seite beachten, wenn Sie die Größe des Markers variieren, ist es wahrscheinlich besser zu nutzen 'plot' ohne Linie (es geht schneller). – tacaswell

+0

Danke für den Tipp über Grundstück mit :) ich nicht darauf hindeutet, es ein Fehler war, wurde nur zu fragen, wie es zu tun. – amn41

Antwort

30

Sie müssen Matplotlib sagen, welche Farbe zu verwenden ist. So verwendet zum Beispiel Seaborn der Standardfarbpalette:

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)) 

Die itertools.cycle stellt sicher, dass wir nicht aus Farben laufen und mit dem ersten beginnen wieder nach dem letzten Verwendung.

0

Um auf Carstens Antwort aufzubauen, wenn Sie eine große Anzahl von Kategorien zuweisen möchten, möchten Sie möglicherweise die Farben zu einer sehr großen Seaborn Palette zippen, zum Beispiel die xkcd_palette oder crayon_palette .. Beachten Sie, dass diese Praxis ist in der Regel a chartjunk anti-pattern: mehr als 5-6 Farben verwendet, ist in der Regel übertrieben, und man könnte schon daran gedacht Ihre Diagrammtyp zu ändern.

import matplotlib.pyplot as plt 
import seaborn as sns 

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