When plotting a swarm plot (seaborn) over a box plot, the points may cover the median line of a box plot. How can I do the swarm plots dots a bit more transparent so that I also see the median of a box plot?
On the plot we do not see the median line because it is covered by the dot, so, optically I do not know where the median is on the second box. Is it possible to do the points of the swarm plot more transparent so that I also see the median line?
Example:
fig, axes = plt.subplots(nrows=1, ncols=1,figsize=(6,2))
data = pd.DataFrame({'a':[3,3,3,3,4,5,6,8,11,11,8,7,7,7,7,7,7,3,3,3,3,3,7,7,7,7,7,7,7,7,7,7,7,8,9,10,11,12,11,11,11]})
sns.boxplot(x='a',data=data, ax = axes)
ax = sns.swarmplot(x='a', data=data, color = 'grey', ax = axes)
(Making a larger figure is not an option)
Two options come directly to my mind:
Make the swarmplot translucent. This can be done by adding the
alpha
argument, e.g.alpha=0.5
for half-transparent. Of course the darker the bar in the background, the less visible the points are (hence I made it yellow here).Show the median line on top of the swarmplot points. This can be done by specifying the
zorder
of the medianline via a dictionary passed through themedianprops
keyword argument.In this case, making the median line half-transparent via
medianprops={"zorder":3, "alpha":0.6}
is equally possible.Of course any combination of the two options can help as well.