如何使用matplotlib填充两条函数曲线交点上方的指定区域
解决方案
直接调整fill_between的边界参数即可实现需求,修改后的代码如下:
import numpy as np import matplotlib.pyplot as plt x1 = np.arange(0, 20, 0.01) f1 = x1 * 0 + 5/3 f3 = -0.25 * (-x1 + 7) # 绘制基础曲线 plt.plot(x1, f1, 'm', linewidth = 3, label='f1', alpha = 0.5) plt.plot(x1, f3, 'y', linewidth = 3, label='f3', alpha = 0.5) # 填充两条曲线上方的区域 y_upper_limit = 10 # 可根据实际需要的y轴显示范围调整 # 下边界取两个函数在每个x点的最大y值,上边界设为y轴上限 plt.fill_between(x1, np.maximum(f1, f3), y_upper_limit, color='r', alpha=0.1, label='Area') plt.ylim(0, y_upper_limit) plt.legend() plt.show()
实现逻辑
- 用
np.maximum(f1, f3)计算每个x坐标下两条曲线的最大y值,作为填充区域的下边界,天然对应了两条曲线交点两侧的更高值位置 - 上边界设为你需要的y轴显示上限即可,即可得到所有位于两条曲线上方的区域
- 如果仅需要填充交点附近的局部上方区域,可以额外添加
where参数限制x范围,示例:# 先计算交点x坐标 intersect_x = (5/3 + 7/4) / 0.25 # 仅填充交点左右2个单位范围内的上方区域 plt.fill_between(x1, np.maximum(f1, f3), y_upper_limit, where=(x1>intersect_x-2)&(x1<intersect_x+2), color='r', alpha=0.1, label='Area')
内容的提问来源于stack exchange,提问作者JumbleBuff
相关产品推荐
相关产品推荐

