Home > Back-end >  Swarmplot with connected dots with Python Seaborn
Swarmplot with connected dots with Python Seaborn

Time:03-10

I'm try to keep track of changes within a dataframe using a boxplot combined with a swarmplot, and lines connecting data points.

So far I only managed to combine the boxplot with the swarmplot, using this code:

import seaborn as sns
from itertools import cycle

import numpy as np
import pandas as pd

#create random dataframe with 4 conditions
df = pd.DataFrame(data = np.random.random(size=(4,4)), columns = ['A','B','C','D'])
datapoints=pd.melt(df)

#add IDs
ID = cycle(["1","2","3", "4"])
datapoints['ID'] = [next(ID) for IDs in range(len(datapoints))]

#plot values 
sns.boxplot(x="variable", y="value", data=datapoints)
sns.swarmplot(x="variable", y="value", data=datapoints, color=".25")

And the result is this: enter image description here

Waht I would like to do is to keep track of changes connecting the single dots across A, B, C and D per ID.

This way I could follow the performance of for example ID 1 across the 4 conditions. Something like this:

enter image description here

CodePudding user response:

Not sure I understood the question as boxplot are used to aggregate information rather than showing all values, but if you want to show all points:

sns.lineplot(x="variable", y="value", hue='ID', data=datapoints,
             estimator=None, legend=False)

or:

sns.lineplot(data=df.T, legend=False)

enter image description here

To have black lines, use:

pal = sns.color_palette(['black'], df.shape[1])
sns.lineplot(x="variable", y="value", hue='ID', data=datapoints,
             estimator=None, legend=False, palette=pal)

enter image description here

  • Related