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

如何用Matplotlib的fill_between填充两条相交直线的4个区域?

用Matplotlib填充两条直线划分的4个区域(含区域2和4)

两条直线方程:

y=3x-4 
y=-x+5

它们相交后在平面内形成4个区域,对应数学不等式如下:

  • Region1: y<3x-4 且 y>-x+5
  • Region2: y>3x-4 且 y>-x+5
  • Region3: y>3x-4 且 y<-x+5
  • Region4: y<3x-4 且 y<-x+5

想要独立填充所有这些区域,但使用plt.fill_between时仅能填充区域1和/或3,如何填充区域2和4?

用户尝试填充区域3的代码:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0,6,0.1)
y = np.arange(0,6,0.1)

# 待绘制的直线
y1 = 3*x - 4
y2 = -x+5

# 两条直线的较小值(区域3的上边界)
y3 = np.minimum(y1, y2)

# 设置坐标轴范围,隐藏负数值
plt.ylim(0, 6)
plt.xlim(0, 6)

# 绘制直线
plt.plot(x, y1,
         x, y2)

# 填充区域3
plt.fill_between(x, y2, y3, color='grey', alpha=0.5)
plt.show()

解决方案:结合坐标轴边界填充无界区域

区域2和4属于“半无界”区域,需要结合坐标轴的上下限来定义填充范围:

  1. 先计算两条直线的交点坐标:
    解方程 3x-4 = -x+5,得交点为 (2.25, 2.75)。

  2. 填充逻辑:

    • 区域2:取两条直线的较大值作为下界,坐标轴上限(这里是6)作为上界,仅在两条直线都在坐标轴范围内的区域填充。
    • 区域4:取两条直线的较小值作为上界,坐标轴下限(这里是0)作为下界,仅在两条直线都在坐标轴范围内的区域填充。
    • 区域1和3:按原有逻辑填充即可。

完整代码示例:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 6, 0.1)
y1 = 3 * x - 4
y2 = -x + 5

# 计算两条直线的最大/最小值
y_max = np.maximum(y1, y2)
y_min = np.minimum(y1, y2)

# 设置坐标轴范围
plt.xlim(0, 6)
plt.ylim(0, 6)

# 绘制两条直线
plt.plot(x, y1, 'k-', label='y=3x-4')
plt.plot(x, y2, 'k--', label='y=-x+5')

# 填充区域1:y在y2和y1之间(仅当y2 < y < y1的部分)
plt.fill_between(x, y2, y1, where=(y1 > y2), color='blue', alpha=0.3, label='Region1')

# 填充区域2:y在y_max到坐标轴上限之间
plt.fill_between(x, y_max, 6, color='red', alpha=0.3, label='Region2')

# 填充区域3:y在y_min和y2之间(仅当y_min < y < y2的部分)
plt.fill_between(x, y_min, y2, where=(y2 > y1), color='green', alpha=0.3, label='Region3')

# 填充区域4:y在坐标轴下限到y_min之间
plt.fill_between(x, 0, y_min, color='yellow', alpha=0.3, label='Region4')

plt.legend()
plt.show()

关键说明

  • 使用where参数可以精准筛选出符合不等式的x范围,避免填充无效区域(比如直线超出坐标轴的部分)。
  • 对于无界区域,直接用坐标轴的上下限作为填充的边界,配合np.maximum/np.minimum获取两条直线的边界值,就能实现区域2和4的填充。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:45:30