如何用Matplotlib填充x、y范围均不同的两条曲线间区域
问题:填充两条非对齐曲线之间的多边形区域
假设我有由以下数据定义的两条曲线:
x1 = [0,1,2,3] y1 = [3,5,4,6] x2 = [1.5,2.5,3.5,4.5] y2 = [1,3,2,4]
通过以下代码可绘制其图像:
plt.figure(figsize=(10,10)) plt.plot(x1, y1) plt.plot(x2, y2) plt.show()

我希望填充这两条曲线之间的区域,即连接两条曲线端点形成的多边形,但plt.fill_between和plt.fill_betweenx因二者x、y范围均不同无法使用,该如何操作?
解决方案
要实现这个效果,你可以把两条曲线的顶点按闭合多边形的顺序拼接,再用plt.fill()直接填充区域,具体步骤:
- 保留第一条曲线的所有点(按原顺序)
- 把第二条曲线的点逆序添加(这样才能形成闭合的多边形边界)
- 将拼接后的x、y坐标传入
plt.fill(),设置填充样式即可
示例代码:
import matplotlib.pyplot as plt x1 = [0,1,2,3] y1 = [3,5,4,6] x2 = [1.5,2.5,3.5,4.5] y2 = [1,3,2,4] plt.figure(figsize=(10,10)) # 绘制原始两条曲线 plt.plot(x1, y1) plt.plot(x2, y2) # 拼接成闭合多边形的顶点坐标 poly_x = x1 + x2[::-1] poly_y = y1 + y2[::-1] # 填充多边形区域,设置颜色和透明度 plt.fill(poly_x, poly_y, color='lightblue', alpha=0.3) plt.show()
原理说明:
逆序第二条曲线的点是关键——这样顶点会形成一个完整的闭合环:从第一条曲线的起点出发,沿第一条曲线走到终点,再沿第二条曲线反向回到起点,刚好构成填充需要的多边形边界。
内容的提问来源于stack exchange,提问作者Nikko Cleri
相关产品推荐
相关产品推荐

