使用 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, y1, y3, where = a1 < a2, color = 'grey', alpha = 0.5)

这会生成以下图:

https://img1.mukewang.com/64d1e6a9000139c603770267.jpg.

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


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


#feasible region

a1 = np.maximum(y0,y3)

a2 = np.minimum(y1,y2)

plt.fill_between(x, a1, a2, where = a1 < a2, color = 'grey', alpha = 0.5)

但是,我仍然对可能指定多个参数感到好奇where,所以我将保留这个问题。


DIEA
浏览 89回答 1
1回答

吃鸡游戏

您可以使用np.maxiumum和np.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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python