Подтвердить что ты не робот

Заполнение Matplotlib между несколькими линиями

Я хотел бы заполнить 3 строки в matplotlib.pyplot, но, к сожалению, fill_between дает мне возможность заполнить только две строки. Любые идеи, как с этим бороться?

Edit:

Хорошо, я не объяснил, что я действительно имею в виду, так как я не могу добавить картинку с моей текущей репутацией, поэтому, возможно, таким образом:

Я пытаюсь заполнить многоугольник, ограниченный этими строками, и я понятия не имею, как потому, что 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
4b9b3361

Ответ 1

Если вы запустите график в точке (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()

enter image description here

Ответ 2

Чтобы использовать 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()

enter image description here

Если вместо этого вы хотели бы заполнить между Y2 и Y3:

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

это даст вам

enter image description here

Ответ 3

Просто вычислите угловые точки многоугольника, т.е. точки пересечения линий. Затем нарисуйте многоугольник, используя 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