You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Seaborn小提琴图叠加stripplot时所有点集中在首个图的问题排查

问题原因及解决方法

错误原因

直接将多个Series组成的列表传入seaborn.stripplot()时,seaborn无法识别列表中每个元素对应小提琴图的不同分组,会默认把所有数据点绘制在同一个x轴位置(即第一个小提琴图处)。

解决步骤

核心是把数据整理成长格式DataFrame,让两个绘图函数共享同一个分组变量,确保数据点和小提琴图一一对应:

  1. 合并数据为长格式DataFrame
    将四个Series合并,新增一列标记每个数据所属的分组:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 合并四个Series为长格式DataFrame
df = pd.concat(
    [X1['total'], X2['total'], X3['total'], X4['total']],
    keys=['X1', 'X2', 'X3', 'X4'],
    names=['group', 'index']
).reset_index().rename(columns={0: 'total'})
  1. 叠加绘制小提琴图和散点
    基于同一个DataFrame调用两个绘图函数,指定x为分组列,y为数值列,同时用plt.gca()确保散点画在同一个坐标轴上:
# 绘制小提琴图
sns.violinplot(data=df, x='group', y='total')
# 叠加绘制散点,jitter参数让点分散避免重叠
sns.stripplot(data=df, x='group', y='total', color='black', jitter=0.2, size=3, ax=plt.gca())

plt.show()

额外说明

  • 用长格式DataFrame是seaborn绘图的标准方式,能避免分组不匹配的问题。
  • stripplot的jitter参数可调整点的分散程度,size控制点的大小,color设置点的颜色,让图表更清晰。

内容的提问来源于stack exchange,提问作者Simd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:05:38