2017-09-09 5 views
1

Mit Seaborn versuche ich ein Faktorplot zu generieren, wobei jedes Teilplot ein Stripplot zeigt. Im Stripplot möchte ich einige Aspekte der Marker kontrollieren.Seaborn FacetGrid: während der Zuordnung eines Stripplot Dodge nicht implementiert

Hier ist die erste Methode, die ich versucht:

import seaborn as sns 
tips = sns.load_dataset("tips") 
g = sns.FacetGrid(tips, col="time", hue="smoker") 
g = g.map(sns.stripplot, 'day', "tip", edgecolor="black", 
      linewideth=1, dodge=True, jitter=True, size=10) 

und erzeugt die folgende Ausgabe ohne Ausweich

output no dodge

Während die meisten der Schlüsselwörter durchgeführt wurden, wurde der Farbton nicht ausgewichen.

ich mit einem anderen Ansatz erfolgreich war:

kws = dict(s=10, linewidth=1, edgecolor="black") 
tips = sns.load_dataset("tips") 
sns.factorplot(x='day', y='tip', hue='smoker', col='time', data=tips, 
      kind='strip',jitter=True, dodge=True, **kws, legend=False) 

Diese die korrekte Ausgabe gibt: correct output

In dieser Ausgabe wird die Farbton ausgewichen.

Meine Frage ist: Warum hat g.map(sns.stripplot...) nicht den Farbton ausweichen?

Antwort

0

Der Parameter hue müßte die sns.stripplot Funktion über die g.map abgebildet werden, anstatt als hue zum Facetgrid eingestellt wird.

import seaborn as sns 
tips = sns.load_dataset("tips") 
g = sns.FacetGrid(tips, col="time") 
g = g.map(sns.stripplot, 'day', "tip", "smoker", edgecolor="black", 
      linewidth=1, dodge=True, jitter=True, size=10) 

enter image description here

Dies liegt daran, map Anrufe sns.stripplot individuell für jeden Wert in der time Spalte, und wenn hue für die komplette Facetgrid angegeben, für jeden Farbtonwert, so dass dodge seine Bedeutung verlieren würde bei jedem einzelnen Anruf.

Ich kann zustimmen, dass dieses Verhalten nicht sehr intuitiv ist, es sei denn, Sie betrachten die source code of map selbst.

Beachten Sie, dass die oben genannte Lösung eine Warnung verursacht:

lib\site-packages\seaborn\categorical.py:1166: FutureWarning:elementwise comparison failed; 
    returning scalar instead, but in the future will perform elementwise comparison 
    hue_mask = self.plot_hues[i] == hue_level 

Ich weiß ehrlich nicht, was diese uns sagt; aber es scheint die Lösung für jetzt nicht zu verderben.

Verwandte Themen