为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

元芳怎么了 2023-08-08 15:09:58
我想在下面的问题中填写3行之间的内容。这是代码:import numpy as npimport matplotlib.pyplot as plt%matplotlib inline# Construct lines# x > 0x = np.linspace(0, 20, 2000)# C1y1 = (36-2*x)/6# C2y2 = (30-5*x)/3# C3y3 = (40-8*x)/2# C4# y4 = 0*x# Make plotplt.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 regiony5 = 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 和零之间)
查看完整描述

2 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

https://img1.sycdn.imooc.com//64d1ea980001e15c10340456.jpg

您可以在零和三条曲线的最小值之间进行填充:


import numpy as np

import matplotlib.pyplot as plt


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

y1 = (36 - 2 * x) / 6

y2 = (30 - 5 * x) / 3

y3 = (40 - 8 * x) / 2


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.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()


查看完整回答
反对 回复 2023-08-08
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

注意:

  1. np.vstack([y1, y2, y3])从 3 个“y”数组创建一个 3 行数组。

  2. ….min(0)计算每列的最小值,因此它实际上是 3 个源数组中的最小值(对于较高的x也具有负值)。

  3. ….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之后。

对于您的数据以及添加了上述指令的代码,我得到:

https://img1.sycdn.imooc.com//64d1eabc0001eb8803880261.jpg

如果需要,请将填充颜色更改为适合您需要的颜色。



查看完整回答
反对 回复 2023-08-08
  • 2 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信