2016-07-29 15 views
3

Ich würde gerne wissen, wie ich mehrere Marker in der gleichen Streifen Plot bekommen konnte.Wie füge ich mehrere Markierungen zu einem Stripplot in Seaborn hinzu?

tips = sns.load_dataset("tips") 

coldict={'Sun':'red','Thur':'blue','Sat':'yellow','Fri':'green'} 
markdict={'Sun':'x','Thur':'o','Sat':'o','Fri':'o'} 

tips['color']=tips.day.apply(lambda x: coldict[x]) 
tips['marker']=tips.day.apply(lambda x: markdict[x]) 

m=sns.stripplot('size','total_bill',hue='color',\ 
       marker='marker',data=tips, jitter=0.1, palette="Set1",\ 
       split=True,linewidth=2,edgecolor="gray") 

Dies scheint nicht zu funktionieren, da Marker nur einen einzelnen Wert akzeptiert.

Ebenfalls bevorzugt möchte ich die entsprechenden 'Sun'-Werte als transparente rote Dreiecke machen. Irgendeine Idee, wie das erreicht werden könnte?

Vielen Dank.

Edit: So ein viel besserer Weg, es zu tun war ein my_ax = plt.axes() und übergibt my_ax zu jedem stripplot (ax = my_ax) zu erklären. Ich glaube, so sollte es gemacht werden.

Antwort

2

Vorsicht, es ist ein wenig hacky aber hier ya gehen:

import sns 

tips = sns.load_dataset("tips") 

plt.clf() 
thu_fri_sat = tips[(tips['day']=='Thur') | (tips['day']=='Fri') | (tips['day']=='Sat')] 
colors = ['blue','yellow','green','red'] 
m = sns.stripplot('size','total_bill',hue='day', 
        marker='o',data=thu_fri_sat, jitter=0.1, 
        palette=sns.xkcd_palette(colors), 
        split=True,linewidth=2,edgecolor="gray") 

sun = tips[tips['day']=='Sun'] 
n = sns.stripplot('size','total_bill',color='red',hue='day',alpha='0.5', 
        marker='^',data=sun, jitter=0.1, 
        split=True,linewidth=0) 
handles, labels = n.get_legend_handles_labels() 
n.legend(handles[:4], labels[:4]) 
plt.savefig('/path/to/yourfile.png') 

enter image description here

+0

Danke. Das hat super funktioniert! Würde es die Sache komplizierter machen, wenn ich oben noch ein Facettengitter hinzufügen würde? – user2755526

+0

Hey kein Problem. Wenn es Ihnen nichts ausmacht, eine weitere Frage mit diesem Code zu stellen, werden wir sehen, was wir tun können. – bernie