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

Matplotlib fill_between 两曲线数值一致时仍可见细线问题求解

问题原因

这个细线并非来自填充区域本身,主要由两个原因导致:

  • fill_between 函数默认会为填充区域绘制与填充色同色的边缘描边,即使两条曲线数值完全相等、填充区域面积为0,边缘描边仍会被渲染,就会表现为一条细线。
  • 部分场景下是显示设备的抗锯齿插值策略导致,相邻色块的边界处因为像素混色会出现多余的细线。
解决方法

推荐按优先级选择以下方案:

  1. 关闭填充区域边缘描边
    这是最通用、效果最好的方案,仅需要为 fill_between 显式指定 edgecolor='none' 参数即可:
import matplotlib.pyplot as plt

y1 = [10, 18, 17, 19, 11, 13, 15, 15, 13, 15, 10, 19, 18, 10, 16, 12, 12, 13, 10, 10]
y2 = [22, 29, 30, 19, 11, 13, 15, 29, 30, 31, 22, 37, 31, 26, 28, 23, 25, 23, 27, 28]
plt.fill_between(range(20), y1, color='blue', edgecolor='none')
plt.fill_between(range(20), y1, y2, color='red', edgecolor='none')
plt.show()
  1. 关闭抗锯齿(可选)
    如果关闭边缘描边后仍有极细的残留线条,可以额外添加 antialiased=False 参数关闭抗锯齿渲染,缺点是填充区域的边缘会变得稍显生硬:
plt.fill_between(range(20), y1, y2, color='red', edgecolor='none', antialiased=False)
  1. 筛选不等值区间绘制(特殊场景用)
    如果业务要求必须保留填充区域的边缘描边,可以提前筛选掉y1和y2数值相等的区间,仅在两值不等的位置绘制对应填充:
import numpy as np
import matplotlib.pyplot as plt

y1 = np.array([10, 18, 17, 19, 11, 13, 15, 15, 13, 15, 10, 19, 18, 10, 16, 12, 12, 13, 10, 10])
y2 = np.array([22, 29, 30, 19, 11, 13, 15, 29, 30, 31, 22, 37, 31, 26, 28, 23, 25, 23, 27, 28])
x = np.arange(20)
mask = y1 != y2
plt.fill_between(x, y1, color='blue')
plt.fill_between(x[mask], y1[mask], y2[mask], color='red')
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:24:05