在多条线之间填充

53
我想在matplotlib.pyplot中填充3条线之间的区域,但不幸的是fill_between只能让我填充两条线之间的区域。有什么办法解决这个问题吗?
编辑:
好的,我没有解释清楚我的真正意思,因为我无法根据我的当前声望添加图片,所以也许可以这样说:
我试图填充由这些线界定的多边形区域,但我不知道该怎么做,因为fill_between只能让我填充其中两条线之间的区域。以下是填充方程:
y <= 4- 2x
y <= 3 - 1/2x
y <= 1 - x
y >= 0
x >= 0

X和Y大于0是显而易见的。我从(0,0)开始绘制图形,但我还有3条线...
y <= 4- 2x
y <= 3 - 1/2x
y <= 1 - x

4
你能详细说明问题并提供一些模拟数据和/或你想要获得的示例吗? - Francesco Montesano
3个回答

61
如果你将图形的起点设置为(0,0),因此不需要考虑不在第一象限内的多边形面积,那么这个公式在这种特殊情况下应该可以解决问题:
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0,10,0.1)

# The lines to plot
y1 = 4 - 2*x
y2 = 3 - 0.5*x
y3 = 1 -x

# The upper edge of polygon (min of lines y1 & y2)
y4 = np.minimum(y1, y2)

# Set y-limit, making neg y-values not show in plot
plt.ylim(0, 5)

# Plotting of lines
plt.plot(x, y1,
         x, y2,
         x, y3)

# Filling between line y3 and line y4
plt.fill_between(x, y3, y4, color='grey', alpha='0.5')
plt.show()

输入图像说明


是否可以在其中一个交叉点上添加一个小节点(圆形),以便将其与其他交叉点区分开来,比如在蓝色和绿色的交叉点上?同时,是否可以显示该点的坐标? - Drimades Boy

39

要使用 fill_between,需要先指定 X 值,然后是你想要“填充之间”的两个 Y 集。以下是一个示例:

import pylab as plt
import numpy as np

X  = np.linspace(0,3,200)
Y1 = X**2 + 3
Y2 = np.exp(X) + 2
Y3 = np.cos(X)

plt.plot(X,Y1,lw=4)
plt.plot(X,Y2,lw=4)
plt.plot(X,Y3,lw=4)

plt.fill_between(X, Y1,Y2,color='k',alpha=.5)
plt.fill_between(X, Y1,Y3,color='y',alpha=.5)

plt.show()

如果您只想填充Y2和Y3之间的区域:

enter image description here

plt.fill_between(X, Y2,Y3,color='m',alpha=.5)

这将为您提供:

输入图片说明


请注意,此答案基于最初发布的原始问题,在编辑之前。 - Hooked

14

计算多边形的角点,即线相交的点。然后使用pyplot.fill绘制多边形。

示例:

import matplotlib.pyplot as plt

# define corner points
x = [1,2,1,0]
y = [2,1,0,1]

# plot
plt.fill(x,y)
plt.show()

生成的图像: Figure 1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接