2016-05-13 6 views
2

Ich versuche, das Aussehen der Boxen in Seaborns Boxplot zu ändern. Ich möchte, dass alle Boxen transparent sind und dass die Rahmen der Boxen aus einer Liste spezifiziert werden. Hier ist der Code mit denen ich arbeite:Seaborn boxplot box weist benutzerdefinierte Kantenfarben aus der Python-Liste zu

import numpy as np 
import pandas as pd 
import seaborn as sns 
import matplotlib.pyplot as plt 
fig, ax = plt.subplots() 

df = pd.DataFrame(np.random.rand(10,4),columns=list('ABCD')) 
df['E'] = [1,2,3,1,1,4,3,2,3,1] 

sns.boxplot(x=df['E'],y=df['C']) 

# Plotting the legend outside the plot (above) 
box = ax.get_position() 
ax.set_position([box.x0, box.y0 + box.height * 0.1, box.width, box.height * 0.9]) 
handles, labels = ax.get_legend_handles_labels() 
leg = plt.legend(handles[0:2], labels[0:2], 
           loc='upper center', bbox_to_anchor=(0.5, 1.10), ncol=2) 
plt.show() 

Dieser post zeigt, wie die Farbe und die Box edgecolor einer einzigen Box ändern. Allerdings möchte ich Box Edgecolors basierend auf einer Liste wie dieser box_line_col = ['r','g',b','purple'] zuweisen. Der obige Code erzeugt 4 Felder im Plot - ich möchte die Farben der benutzerdefinierten Box-Kanten zuweisen, beginnend mit der ersten (ganz links) Box bis zum letzten (am weitesten rechts stehenden) Feld.

Ist es möglich, die Farben der Boxenkanten aus einer Liste anzugeben, während die Boxen selbst transparent bleiben (facecolor = white)?

+1

[Diese] (http://stackoverflow.com/questions/36874697/how-to-edit-properties-of-whiskers-fliers-caps-etc-in-seaborn-boxplot/36893152#36893152) antworten auf meine ähnliche Frage kann Ihnen helfen. – dsholes

Antwort

2

Das Durchlaufen der Boxen und das Einstellen der Farben sollte funktionieren. Am Ende des Codes, kurz vor plt.show() add:

box_line_col = ['r','g','b','purple'] 

for i,box_col in enumerate(box_line_col): 
    mybox = g.artists[i] 
    mybox.set_edgecolor(box_col) 
    mybox.set_fccecolor(None) #or white, if that's what you want 

    # If you want the whiskers etc to match, each box has 6 associated Line2D objects (to make the whiskers, fliers, etc.) 
    # Loop over them here, and use the same colour as above 
    for j in range(i*6,i*6+6): 
     line = g.lines[j] 
     line.set_color(box_col) 
     line.set_mfc(box_col) 
     line.set_mec(box_col) 

plt.show() 

Der erste Teil basiert auf dem Beitrag, den Sie verwiesen und und die Whisker-Färbung Richtungen von this post kamen.

Verwandte Themen