Python中使用Matplotlib的fill_between进行区域填充
2025-05-21
技术
数据可视化里,区域填充是一个很实用但经常被低估的小技巧。只加一层颜色,就能让趋势、区间和比较关系更直观。Matplotlib 里的 fill_between() 正是做这件事最常用的函数之一。
这篇文章重点演示 4 类常见用法:
- 向基准线下方填充
- 向上方参考线填充
- 在两条曲线之间填充
- 在真实业务图里如何用它表示区间和重点区域
数据准备
首先我们创建一个正弦波作为基础数据:
import numpy as np
import matplotlib.pyplot as plt
n = 1024
x = np.linspace(-np.pi, np.pi, n, endpoint=True)
y = np.sin(2 * x)
plt.plot(x, y, color='blue', alpha=1.00)
plt.savefig("sine_wave.png", dpi=200)
plt.close()
画出来的正弦函数图为:

matplotlib向下填充
使用fill_between进行颜色填充,这里 y2=0,表示从曲线填充到 y=0 这条基准线。
plt.plot(x, y, color='blue', alpha=1.00)
plt.fill_between(x, y, 0, color='blue', alpha=.1)
plt.savefig("sin_fill_below.png",dpi=200)
plt.close()
关键参数说明:
- x:X轴数值
- y:主曲线数值
- 0:填充至y=0处
- alpha:控制透明度(0-1)
matplotlib向上填充
使用fill_between进行颜色填充,其中参数 y2=1,表示从曲线填充到 y=1 这条参考线。
plt.plot(x, y, color='blue', alpha=1.00)
plt.fill_between(x, y, 1, color='green', alpha=.1)
plt.savefig("sin_fill_above.png",dpi=200)
plt.close()

matplotlib两条线之间填充
一个道理,区别在于将fill_between改为该线条对应的值即可,这里以cos作为第二条线,并在sin与cos之间进行红色的填充,代码如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 数据生成
n = 1024
x = np.linspace(-np.pi, np.pi, n, endpoint=True)
y = np.sin(2 * x)
y2 = np.cos(2*x)
# 绘图 春江暮客
plt.plot(x, y, color='blue', alpha=1.00)
plt.plot(x, y2, color='green', alpha=1.00)
plt.fill_between(x, y, y2, color='red', alpha=0.5)
plt.savefig("sin_cos_fill.png",dpi=200)
其图形为:

条件区域填充
在实际分析里,很多时候你并不想整段都填色,而是只高亮满足条件的区间,例如“大于 0 的部分”或者“超过阈值的部分”。这时可以配合 where 参数使用:
plt.plot(x, y, color='blue')
plt.fill_between(x, y, 0, where=(y > 0), color='red', alpha=0.3)
plt.fill_between(x, y, 0, where=(y <= 0), color='green', alpha=0.3)
plt.savefig("sin_where_fill.png", dpi=200)
plt.close()
这类写法非常适合高亮正负区间、阈值区间、异常波动区间。
实际应用场景
fill_between函数特别适用于:
- 突出显示置信区间
- 可视化数据范围
- 比较时间序列数据
- 创建堆叠面积图
常见问题
1. 填充颜色把主线遮住了
通常是透明度太高,或者先后顺序不合适。
修复:
- 降低
alpha - 先
fill_between(),再plot()主线 - 必要时用更浅的颜色
2. 两条线之间填充结果不符合预期
最常见原因是两条曲线的 x 不一致,或者存在缺失值。
修复:
- 确认两条曲线共享同一组
x - 先处理
NaN - 再执行
fill_between(x, y1, y2)
3. 导出图片边缘被裁切
修复:
- 保留
bbox_inches='tight' - 提高
dpi - 保存前先
tight_layout()
延伸阅读
总结
掌握Matplotlib的fill_between()函数能大幅提升Python数据可视化效果。无论是科学绘图、商业仪表盘还是探索性数据分析,这些技巧都能使您的图表更具信息量和视觉吸引力。
- 原文作者:春江暮客
- 原文链接:https://www.bobobk.com/748.html
- 版权声明:本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。