条形图上的seaborn重叠swarmplot

时间:2020-10-06 10:23:16

标签: python pandas matplotlib plot seaborn

我想在小号图上重叠一个小号,并与seaborn重叠。 让我们生成我的数据(3个条件,在3个时间点各有3个重复):

condition_list = []
experiment_list = []
day_list = []
result_list = []


for condition in ['A', 'B', 'C']:
        
    for experiment in range(1,4):

        for day in range(1,4):

            condition_list.append(condition)
            experiment_list.append(experiment)
            day_list.append(day)
            result_list.append(random.random())
            
            
datas = list(zip(condition_list,experiment_list,day_list,result_list))

df = pd.DataFrame(data=datas, columns=['Condition','Experiment','Day','Result'])

我对这个专家很好:

sns.catplot(x="Condition", y="Result", hue='Day', data=df, kind="bar", ci='sd')

看起来像这样: enter image description here

但是,如果我想在该图中添加相应的值作为点,则它们都在同一横坐标上对齐:

sns.catplot(x="Condition", y="Result", hue='Day', data=df, kind="bar", ci='sd')
sns.swarmplot(x="Condition", y="Result", hue='Day', data=df)

enter image description here

这是我的问题!对于每个条,我想将三个对应的值绘制成点。

例如,如果我们限制第一天的数据,我可以在同一张图上绘制条形和点形:

new_df = df[df['Day'] == 1].reset_index(drop=True)

sns.barplot(x="Condition", y="Result", data=new_df, ci="sd")
sns.swarmplot(x="Condition", y="Result",  color='black',data=new_df, zorder=10)

enter image description here

是否可以对seaborn的第一个图形执行相同的操作?非常感谢您的帮助^^

1 个答案:

答案 0 :(得分:0)

感谢JohanC的评论,群图的闪避功能根据点的类别对点进行分割。

ax = sns.catplot(x="Condition", y="Result", hue='Day', data=df, kind="bar", ci='sd')
ax = sns.swarmplot(x="Condition", y="Result", hue='Day', color='black', dodge=True,data=df)
ax.get_legend().set_visible(False)

enter image description here