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

如何在Seaborn分类轴柱状图上叠加显示单个数据点

实现Seaborn分组柱状图叠加散点的方法

你之前的代码生成两张独立图的核心原因是:sns.catplot()是图级(FacetGrid)接口,每次调用都会独立创建新的画布,要实现叠加需要在同一个FacetGrid对象上依次绘制不同的图表元素。

正确实现代码如下:

import seaborn as sns
import matplotlib.pyplot as plt

# 加载示例数据
tips = sns.load_dataset("tips")

# 第一步:先绘制分组柱状图,得到FacetGrid对象g,作为叠加的主画布
g = sns.catplot(
    x="sex", 
    y="total_bill", 
    hue="smoker", 
    row="time", 
    data=tips, 
    kind="bar", 
    ci = "sd", 
    edgecolor="black",
    errcolor="black",
    errwidth=1.5,
    capsize = 0.1,
    height=4, 
    aspect=.7,
    alpha=0.8 # 调低柱子透明度,避免完全遮挡散点
)

# 第二步:在已有画布的每个子图上叠加散点
g.map_dataframe(
    sns.stripplot,
    x="sex", 
    y="total_bill", 
    hue="smoker",
    dodge=True, # 必须设置,保证不同hue分组的散点和对应柱子位置对齐
    alpha=0.6,
    size=4,
    jitter=0.2, # 控制点的横向分散程度,避免点完全重叠
    color="black" # 也可以去掉这个参数,让点和柱子同色系,根据需求调整
)

# 处理重复图例(两次绘图会生成两套图例,只保留一套即可)
handles, labels = g.axes[0][0].get_legend_handles_labels()
g.legend.remove()
g.add_legend(handles=handles[:2], labels=labels[:2])

plt.show()

关键参数说明

  • dodge=True:分组散点和分组柱状图的位置对齐核心参数,不设置的话不同吸烟属性的散点会挤在同一x轴位置,和柱子错位
  • alpha:分别调整柱子和散点的透明度,避免元素之间完全遮挡
  • jitter:控制散点的横向抖动幅度,平衡点的分散度和可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:27:02