Search code examples
pythonpython-3.xmatplotlibdata-visualizationseaborn

How to make dots in Swarmplot (Seaborn) overlap with each other?


I have made a swarmplot with seaborn, but I can't seem to find the option to make the dots overlap with each other.

They overlap with each other, but only at the sides.

I would like them to make overlap everywhere when they would not be able fit, but now they only overlap at the sides.

data = sns.load_dataset('iris')
sns.swarmplot(data=data, y="sepal_length", x="species", edgecolor="black",alpha=.5, s=15,linewidth=1.0)

enter image description here


Solution

  • I don't think it's possible to let the markers overlap deliberately with swarmplot. Of course smaller markers would not overlap at all, if that is desired.

    Else a hacky wordaround is to use the fact that seaborn hardcodes the distance between markers for a specific figure size. Hence when plotting on a huge figure, where no overlap happens, but then making the figure smaller afterwards, overlapp should be pretty high.

    import seaborn as sns
    import matplotlib.pyplot as plt
    
    data = sns.load_dataset('iris')
    fig, ax = plt.subplots(figsize=(19,4.8))
    sns.swarmplot(data=data, y="sepal_length", x="species", 
                       edgecolor="black",alpha=.5, s=15,linewidth=1.0, ax=ax)
    fig.set_size_inches(6.4,4.8)
    
    plt.show()
    

    enter image description here

    Here you would need to find good values for the figsize, such that you're happy with the result.