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

如何用Seaborn或其他工具为分布图仅填充某x值左侧/右侧区域?

给Seaborn分布图添加局部区域阴影的最简方法

嘿,这个需求其实超级好实现——毕竟Seaborn本身就是基于Matplotlib构建的,直接用Matplotlib的核心函数就能搞定,不用额外装别的工具。核心思路就是:先画出你的分布曲线/直方图,再用fill_between函数给指定x区间填色。

下面给你具体的代码示例,分两种场景(右侧阴影、左侧阴影)来展示:

1. 基础准备:先画出Seaborn分布图

假设我们用KDE曲线来展示分布(直方图的思路类似),先生成数据并绘图:

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

# 生成示例数据
np.random.seed(42)
data = np.random.normal(loc=0, scale=1, size=1000)

# 画出KDE分布
plt.figure(figsize=(8,5))
ax = sns.kdeplot(data, fill=False, color='darkblue')  # fill=False先不填充整体
plt.title('Distribution with Right-Side Shading')

2. 添加右侧阴影(指定x值右侧区域)

假设我们要给x=1右侧的区域加阴影,步骤如下:

# 确定要分割的x值
x_cutoff = 1

# 获取KDE曲线的x和y数据(从ax的线条对象里提取)
line = ax.lines[0]
x_data = line.get_xdata()
y_data = line.get_ydata()

# 筛选出x >= x_cutoff的部分对应的x和y
mask = x_data >= x_cutoff
x_shade = x_data[mask]
y_shade = y_data[mask]

# 用fill_between填充阴影,设置透明度和颜色
ax.fill_between(x_shade, y_shade, color='orange', alpha=0.3)

plt.show()

3. 添加左侧阴影(指定x值左侧区域)

如果要给x=0左侧加阴影,只需要修改mask的条件:

x_cutoff = 0
mask = x_data <= x_cutoff  # 改成小于等于
x_shade = x_data[mask]
y_shade = y_data[mask]

ax.fill_between(x_shade, y_shade, color='green', alpha=0.3)
plt.show()

关键细节说明

  • 如果你用的是带直方图的分布(比如sns.histplot(data, kde=True)),KDE曲线依然是ax.lines[0],所以提取数据的逻辑不变;如果要给直方图的柱子加阴影,可以直接针对直方图的patch对象处理,但一般需求都是给KDE曲线下方加阴影,上面的方法足够用。
  • alpha参数用来调整阴影的透明度,避免遮挡原曲线;颜色可以随便换,比如'red'、'lightblue'都行。
  • 如果你的x轴范围不是自动生成的,记得确保x_cutoff在x_data的范围内,不然填充会看不到效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:08:50