Python 如何在matplotlib中填充线间区域

Python 如何在matplotlib中填充线间区域,python,matplotlib,pulp,Python,Matplotlib,Pulp,在matplotlib中绘制后,我想从下面的等式中填充最大化区域 尝试了所有的可能性,但无法填充所需的区域 import numpy as np import matplotlib.pyplot as plt A = np.linspace(0, 100, 2000) # 3A+4B≤30 y1 = (30 - A * 3 ) /4 # 5A+6B≤60 y2 = (60 - A * 5)/6 # 1.5A+3B≤21 y3 = (21 - A * 1.5)/3.0 plt.plot(A

在matplotlib中绘制后,我想从下面的等式中填充最大化区域 尝试了所有的可能性,但无法填充所需的区域

import numpy as np
import matplotlib.pyplot as plt

A = np.linspace(0, 100, 2000)

# 3A+4B≤30

y1 = (30 - A * 3 ) /4
# 5A+6B≤60
y2 = (60 - A * 5)/6
# 1.5A+3B≤21
y3 = (21 - A * 1.5)/3.0

plt.plot(A, y1, label=r'$3A+4B\leq30$')
plt.plot(A, y2, label=r'$5A+6B\leq60$')
plt.plot(A, y3, label=r'$1.5A+3B\leq21$')


plt.xlim((0, 20))
plt.ylim((0, 15))
plt.xlabel(r'$x values$')
plt.ylabel(r'$y values$')

plt.fill_between(A, y3, where = y2<y3,color='grey', alpha=0.5)
plt.legend(bbox_to_anchor=(.80, 1), loc=2, borderaxespad=0.1)
plt.show()
将numpy导入为np
将matplotlib.pyplot作为plt导入
A=np.linspace(011002000)
#3A+4B≤30
y1=(30-A*3)/4
#5A+6B≤60
y2=(60-A*5)/6
#1.5A+3B≤21
y3=(21-A*1.5)/3.0
plt.绘图(A,y1,标签=r'$3A+4B\leq30$)
plt.绘图(A,y2,标签=r'$5A+6B\leq60$)
plt.绘图(A,y3,标签=r'$1.5A+3B\leq21$)
plt.xlim((0,20))
plt.ylim((0,15))
plt.xlabel(r'$x值$')
plt.ylabel(r'$y值$')

在(A,y3,其中=y2之间填充?我假设您希望填充
y1
y3
之间的区域,直到它们彼此相交,因为您指定(2,6)为点?然后使用:


plt.fill\u(A,y1,y3,其中=y1这是一个基于链接的解决方案。与链接解决方案的唯一区别是,对于您的情况,我必须使用
fill_betweenx
覆盖曲线共有的整个x轴,并切换
x
Y
的顺序。想法是首先在一定公差范围内找到交点d然后从左至点的一条曲线和右至交叉点的另一条曲线取值。我还必须在
ind
中添加一个额外的
[0]
,以使其工作

import numpy as np
import matplotlib.pyplot as plt

A = np.linspace(0, 100, 2000)

y1 = (30 - A * 3 ) /4
y2 = (60 - A * 5)/6
y3 = (21 - A * 1.5)/3.0

plt.plot(A, y1, label=r'$3A+4B\leq30$')
plt.plot(A, y2, label=r'$5A+6B\leq60$')
plt.plot(A, y3, label=r'$1.5A+3B\leq21$')

plt.xlim((0, 20))
plt.ylim((0, 12))
plt.xlabel(r'$x values$')
plt.ylabel(r'$y values$')

plt.legend(bbox_to_anchor=(.65, 0.95), loc=2, borderaxespad=0.1)

def fill_below_intersection(x, S, Z):
    """
    fill the region below the intersection of S and Z
    """
    #find the intersection point
    ind = np.nonzero( np.absolute(S-Z)==min(np.absolute(S-Z)))[0][0]
    # compute a new curve which we will fill below
    Y = np.zeros(S.shape)
    Y[:ind] = S[:ind]  # Y is S up to the intersection
    Y[ind:] = Z[ind:]  # and Z beyond it
    plt.fill_betweenx(Y, x, facecolor='gray', alpha=0.5) # <--- Important line

fill_below_intersection(A, y3, y1)
将numpy导入为np
将matplotlib.pyplot作为plt导入
A=np.linspace(011002000)
y1=(30-A*3)/4
y2=(60-A*5)/6
y3=(21-A*1.5)/3.0
plt.绘图(A,y1,标签=r'$3A+4B\leq30$)
plt.绘图(A,y2,标签=r'$5A+6B\leq60$)
plt.绘图(A,y3,标签=r'$1.5A+3B\leq21$)
plt.xlim((0,20))
plt.ylim((0,12))
plt.xlabel(r'$x值$')
plt.ylabel(r'$y值$')
plt.图例(bbox_至_锚=(.65,0.95),loc=2,borderaxespad=0.1)
def在交叉点(x、S、Z)下方填充:
"""
填充S和Z交点下方的区域
"""
#找到交点
ind=np.非零(np.绝对(S-Z)=min(np.绝对(S-Z))[0][0]
#计算一条我们将在下面填充的新曲线
Y=np.零(S.形)
Y[:ind]=S[:ind]#Y在交叉口处
Y[ind:]=Z[ind:]#并且Z超过它

plt.fill_betweenx(Y,x,facecolor='gray',alpha=0.5)#你所说的“最大化”区域是什么意思?最大化区域是提供最大通过输入的区域。它在图形上的什么位置?运行给定的脚本,你会看到蓝色和绿色线相交。这两条线(x和Y平面)下面的区域。你应该用油漆或其他东西把它涂成阴影,这样其他人就会知道你说的是哪个区域。我用y3替换了y2,反之亦然。。这不是我想要的输出。@VijayaBhaskar那么,也许你应该指定你想要的输出是什么。@VijayaBhaskar没有办法告诉你想要实现什么如果你想填充绿线下的所有东西直到交叉点(不仅仅是蓝色和绿色之间),那么使用
plt.fill_-between(A,y3,其中=y1plt.fill_-between(A,y3,其中=y3你是冠军!这正是我想要的。)