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

Seaborn小提琴图叠加散点图失败问题及解决方案

解决Seaborn小提琴图与散点图叠加显示偏差的问题

需求:对比两个数据集,用Seaborn绘制小提琴图展示数据集df2,用stripplot散点图展示数据集df,但初始代码无法实现两图叠加,存在显示偏差。

初始代码片段

figure, ax = plt.subplots(1, 1, figsize=(10,10))

ax = sns.violinplot(data=df2.rolling(window=3).mean(),   split=False, color="pink")

sns.stripplot(data=df.rolling(window=3).mean(), dodge=True,  linewidth=1, jitter=False, ax=ax)

数据集描述

df2的统计信息

Bafoussam
count  1395.000000
mean      7.030180
std      10.730945
min       0.000000
25%       0.000000
50%       2.900000
75%       9.800000
max     102.300003

df的统计信息

Bafoussam    Dschang
count  31.000000  31.000000
mean   16.980645  26.138710
std    25.344683  31.060786
min     0.000000   0.000000
25%     0.000000   0.000000
50%     8.200000   8.100000
75%    24.500000  48.800000
max    96.200000  90.600000

最终实现代码

fig = plt.figure(figsize=(10,14))
gs = fig.add_gridspec(2, 2)
ax1 = fig.add_subplot(gs[0, 0])
ax2 = fig.add_subplot(gs[0, 1])

ax3 = fig.add_subplot(gs[1, 0])
ax4 = fig.add_subplot(gs[1, 1])


sns.violinplot(data=df2["Station1"],   split=False, color="pink", inner=None, ax=ax1)
sns.stripplot(data=df["Statation1"], dodge=True,  linewidth=1, jitter=False, ax=ax1, color="red", size=16)


sns.violinplot(data=df2["Station2"].rolling(window=rday).mean(), inner=None, split=False, color="pink", ax=ax2)
sns.stripplot(data=df["Station2"].rolling(window=rday).mean(), dodge=True,  linewidth=1, jitter=False, ax=ax2, color="red", size=16)

关键调整点

  • 采用网格布局拆分多个子图,分别对应不同站点的数据对比,避免单图叠加的显示冲突
  • 给小提琴图添加inner=None参数,减少内部元素干扰,让散点图更清晰
  • 明确指定每个绘图函数的ax参数,确保图形绘制在目标子图上
  • 调整散点图的颜色、大小,提升叠加后的可视化辨识度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:55:07