使用fill_between和min / max表示不等式

问题描述

我的代码

import matplotlib.pyplot as plt
import numpy as np

# x > 0
x = np.linspace(0,17,100)
#x2>=0
y0 = (x*0)
#-x1+x2 <= 1
y1 = 1+x
#x1+6x2 <= 15
y2 = 15/6 - (1/6)*x
#4x1-x2 <= 10
y3 = 4*x-10

plt.xlabel(r'$x_2>=0$')
plt.ylabel(r'$x_1>=0$')

plt.plot(x,y0,'r')
plt.plot(x,y1,'b')
plt.plot(x,y2,'y')
plt.plot(x,y3,'g')
plt.xlim((0,17))
plt.ylim((0,9))

#feasible region
a1 = np.minimum(y2,y3)
a2 = np.minimum(y1,y2)
plt.fill_between(x,where = a1 < a2,color = 'grey',alpha = 0.5)

这将生成以下图:

graph

但是,我不希望灰色延伸超过黄线,即,我要删除位于4边多边形上方的三角形内部的灰色。意思是,我也希望删除超过黄线的值,但是我不确定如何在不向where添加一个参数的情况下表示它。尝试此操作时我只有错误。有没有一种方法可以为where指定多个参数?

编辑:我已经通过将参数调整为以下方式解决了该问题:

#feasible region
a1 = np.maximum(y0,a1,a2,alpha = 0.5)

但是,我仍然对可能为where指定多个参数感到好奇,因此我将继续讨论该问题。

解决方法

您可以使用np.maxiumumnp.minimum来定义y值。这样,您就不必“分段”地进行操作。在下界上使用maximum来定义一个下界。与minimum和上限相同。另外,在您的示例中,您切断了y轴,实际上在其下面有阴影区域。

Y1 = np.maximum(y0,y3)
Y2 = np.minimum(y1,y2)
plt.fill_between(x,Y1,Y2,where = Y1 < Y2,color = 'grey',alpha = 0.5)

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...