猿问

matplotlib 两条以上曲线之间的填充

我想在下面的问题中填写3行之间的内容。这是代码:


import numpy as np

import matplotlib.pyplot as plt

%matplotlib inline


# Construct lines

# x > 0

x = np.linspace(0, 20, 2000)

# C1

y1 = (36-2*x)/6

# C2

y2 = (30-5*x)/3

# C3

y3 = (40-8*x)/2

# C4

# y4 = 0*x


# Make plot

plt.plot(x, y1, label=r'$2 x_{1} + 6 x_{2}\leq 36$')

plt.plot(x, y2, label=r'$x_{1} + 3 x_{2}\leq 30$')

plt.plot(x, y3, label=r'$x_{1} + 2 x_{2}\leq 40$')

# plt.plot(x, y4, label=r'$x_{1}, x_{2}\geq 0$')

plt.xlim((0, 16))

plt.ylim((0, 11))

plt.xlabel(r'$x_1$')

plt.ylabel(r'$x_2$')


# Fill feasible region

y5 = np.minimum(0, 0)

y6 = np.maximum(y2, y3)

plt.fill_between(x, y1, y2, color='grey', alpha=0.5,

                interpolate=True)

plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)

我想填充下图中红色阴影部分(在 y1、y2、y3 和零之间)

元芳怎么了
浏览 135回答 2
2回答

守候你守候我

您可以在零和三条曲线的最小值之间进行填充:import numpy as npimport matplotlib.pyplot as pltx = np.linspace(0, 20, 2000)y1 = (36 - 2 * x) / 6y2 = (30 - 5 * x) / 3y3 = (40 - 8 * x) / 2plt.plot(x, y1, label=r'$2 x_{1} + 6 x_{2}\leq 36$')plt.plot(x, y2, label=r'$x_{1} + 3 x_{2}\leq 30$')plt.plot(x, y3, label=r'$x_{1} + 2 x_{2}\leq 40$')plt.xlim((0, 16))plt.ylim((0, 11))plt.xlabel(r'$x_1$')plt.ylabel(r'$x_2$')plt.fill_between(x, y1, y2, color='grey', alpha=0.5,                 interpolate=True)plt.fill_between(x, 0, np.min([y1, y2, y3], axis=0), color='red', alpha=0.5, hatch='//',                 interpolate=True, label='$intersection$')plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)plt.tight_layout()plt.show()

犯罪嫌疑人X

注意:np.vstack([y1, y2, y3])从 3 个“y”数组创建一个 3 行数组。….min(0)计算每列的最小值,因此它实际上是 3 个源数组中的最小值(对于较高的x也具有负值)。….clip(min=0)将上述负数元素转换为0。因此,添加到您的代码中:plt.fill_between(x, 0, np.vstack([y1, y2, y3]).min(0).clip(min=0),     color='yellow', alpha=0.5, interpolate=True)例如在你的第一个fill_ Between之后。对于您的数据以及添加了上述指令的代码,我得到:如果需要,请将填充颜色更改为适合您需要的颜色。
随时随地看视频慕课网APP

相关分类

Python
我要回答