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

如何更新matplotlib中fill_between的填充数据?

如何更新matplotlib中fill_between的数据

matplotlib里的fill_between对象没法用set_offsets更新数据——这个方法是给散点图(scatter)这类集合设计的,用来整体平移元素,根本不适合修改fill_between的上下边界。

要正确更新fill_between的填充范围,得直接操作它的路径顶点数据,步骤如下:

  • fill_between返回的是PolyCollection对象,它的路径存储在get_paths()里,每个路径包含顶点数组(vertices)和路径指令(codes)。
  • fill_between的路径顶点结构是:前半段是x坐标+上边界(y2)的点,后半段是反转的x坐标+下边界(y1)的点,最后闭合形成填充区域。
  • 直接修改顶点数组里的y值,就能更新上下边界。

完整示例代码

import matplotlib.pyplot as plt

# 初始化绘图
x = [1, 2, 3]
original_y1 = [5, 5, 5]
original_y2 = [4, 5, 6]
fill = plt.fill_between(x, original_y1, original_y2)

# 要更新的新边界
new_y1 = [3, 4, 5]
new_y2 = [4, 5, 6]  # 也可以换成新的y2值,比如[3,6,4]

# 获取路径并修改顶点
path = fill.get_paths()[0]
vertices = path.vertices

# 更新上边界(前半段顶点的y值)
vertices[:len(x), 1] = new_y2
# 更新下边界(后半段顶点的y值,注意y1要反转后赋值,因为x是倒序的)
vertices[len(x):, 1] = new_y1[::-1]

# 应用修改并刷新绘图
path.vertices = vertices
plt.draw()
plt.show()

为什么set_offsets没用?

set_offsets的作用是给集合里的每个元素添加一个偏移量,相当于把整个填充区域平移,不会改变上下边界的形状。你修改y1后用它,只是把原来的填充块挪了位置,自然看不到边界变化的效果。

内容的提问来源于stack exchange,提问作者W. Zhu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:03:13