2015-02-10 13 views
16

Jak mogę uzyskać kolory seaborn podczas wykonywania działki rozproszonej?cykl seaborn poprzez kolory z matplotlib scatter

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

Jest to „funkcja”, a nie „bug” 'scatter' jest' ScalarMappable' który oznacza, że ​​można przypisać wartość skalarną do każdego znacznika, który będzie niż być wykorzystywane (wraz z mapą kolorów), aby kolor każdego markera zgodnie z wartością skalarną. Biorąc pod uwagę, że posiadanie 'scatter' bierze udział w logice cyklu kolorów wydaje się głupie/zbyt skrzypiące. Na marginesie, chyba że zmienisz rozmiar znaczników, prawdopodobnie lepiej jest użyć "plot" bez linii (będzie działać szybciej). – tacaswell

+0

Dzięki za podpowiedź na temat używania fabuły :) Nie sugerowałem, że to był błąd, tylko pytałem, jak to zrobić. – amn41

Odpowiedz

30

Musisz powiedzieć matplotlib, którego koloru użyć. Aby go wykorzystać, na przykład Domyślna paleta kolorów Seaborn za:

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

itertools.cycle pilnuje nie zabraknie kolorów i zacząć pierwszy raz po użyciu ostatniego.

0

Aby wypróbować odpowiedź Carstena, jeśli masz dużą liczbę kategorii, do których można przypisać kolory, możesz spakować kolory do bardzo dużej palety seaborn, na przykład xkcd_palette lub crayon_palette .. Pamiętaj, że ta praktyka jest zwykle a chartjunk anti-pattern: używanie więcej niż 5-6 kolorów jest zwykle przesadą i może być konieczne rozważenie zmiany typu wykresu.

import matplotlib.pyplot as plt 
import seaborn as sns 

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