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

基于多组不等长列表绘制Seaborn stripplot并叠加箱线图问题

实现方案

核心思路

  • 首先要把不等长的列表转换为Seaborn支持的长格式DataFrame,新增分类列标记每个数值所属的列表,这是X轴可以按分类排布的核心
  • 先绘制箱线图,再叠加stripplot散点,保证散点显示在箱线图层上方
  • 手动固定Y轴取值范围为0~1

完整可运行代码

import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt

# 原始数据
pn = [0.70604173074, 0.7019483995600001, 0.70271586578, 0.6977801500400002]
tc = [0.49288115891999995, 0.7288539852599999, 0.6258675808399999, 0.33007094978000007, 0.45538473337999996, 0.5849680367, 0.5151045102999999, 0.78011459304, 0.52564381038]
pc = [0.6286486934200001, 0.6450898248599999, 0.45266545178, 0.54746642074, 0.36717567197999995, 0.6974179308799999]
tn = [0.7776927921000001, 0.7845524455400001]

# 转换为Seaborn适配的长表格
data_list = []
for category, values in zip(["pn", "tc", "pc", "tn"], [pn, tc, pc, tn]):
    for val in values:
        data_list.append({"category": category, "value": val})
df = pd.DataFrame(data_list)

# 绘图逻辑
plt.figure(figsize=(6, 4))
# 先绘制箱线图,关闭自带离群点避免和散点重复
sns.boxplot(x="category", y="value", data=df, width=0.3, fliersize=0)
# 叠加stripplot散点,jitter控制同分类下散点横向抖动幅度
sns.stripplot(x="category", y="value", data=df, size=6, color="black", jitter=0.1)
# 固定Y轴范围为0~1
plt.ylim(0, 1)
# 展示图表
plt.show()

可调整参数说明

  • 散点大小通过stripplot的size参数控制
  • 同分类散点的分散程度通过jitter参数调整,值越大散点越分散
  • 箱线图的宽度通过boxplot的width参数调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:00:02