如何更新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
相关产品推荐
相关产品推荐

