2014-10-10 1 views
10

Seaborn consente di definire tavolozze di colori che contengono più colori, utili per grafici con molte linee. Tuttavia, quando si imposta la tavolozza su una con più colori, vengono utilizzati solo i primi sei, dopodiché i colori vengono riciclati, rendendo difficile distinguere le linee. Questo può essere sovrascritto chiamando esplicitamente la tavolozza, ma non è conveniente. Esiste un modo per forzare la tavolozza corrente di Seaborn a non riciclare i colori, quando ne vengono definiti più di 6?Tavolozze Seaborn - evita il riciclaggio dei colori

Esempio:

from matplotlib import pyplot as plt 
import pandas as pd 
import seaborn as sb 

# Define a palette with 8 colors 
cmap = sb.blend_palette(["firebrick", "palegreen"], 8) 
sb.palplot(cmap) 

palette with 6 colors

# Set the current palette to this; only 6 colors are used 
sb.set_palette(cmap) 
sb.palplot(sb.color_palette()) 

palette with 6 colors

df = pd.DataFrame({x:[x*10, x*10+5, x*10+10] for x in range(8)}) 
fig, (ax1, ax2) = plt.subplots(2,1,figsize=(4,6)) 
# Using the current palette, colors repeat 
df.plot(ax=ax1) 
ax1.legend(bbox_to_anchor=(1.2, 1)) 
# using the palette that defined the current palette, colors don't repeat 
df.plot(ax=ax2, color=cmap) 
ax2.legend(bbox_to_anchor=(1.2, 1)) ; 

charts with 6 or 8 colors used

+0

odori come un insetto Seaborn per me. – tacaswell

+0

Anche io, ma non voglio fare supposizioni – iayork

+1

In realtà, io non la penso così: http://web.stanford.edu/~mwaskom/software/seaborn/generated/seaborn.color_palette.html Sembra sta facendo quello che dovrebbe, è solo fastidioso. – tacaswell

risposta

8

Solution (t matasse per @tcaswell per il puntatore): Impostare la tavolozza utilizzando esplicitamente tutti i colori:

# Setting the palette using defaults only finds 6 colors 
sb.set_palette(cmap) 
sb.palplot(sb.color_palette()) 
sb.palplot(sb.color_palette(n_colors=8)) 

# but setting the number of colors explicitly allows it to use them all 
sb.set_palette(cmap, n_colors=8) 
# Even though unless you explicitly request all the colors it only shows 6 
sb.palplot(sb.color_palette()) 
sb.palplot(sb.color_palette(n_colors=8)) 

enter image description here enter image description here enter image description here enter image description here

# In a chart, the palette now has access to all 8 
fig, ax1 = plt.subplots(1,1,figsize=(4,3)) 
df.plot(ax=ax1) 
ax1.legend(bbox_to_anchor=(1.2, 1)) ; 

enter image description here

+1

Vedi qui per maggiori informazioni: https://github.com/mwaskom/seaborn/issues/314 – mwaskom