2013-05-07 6 views
20

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

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 
+4

вы можете уточнить этот вопрос и предоставить некоторые фиктивные данные и/или пример того, что вы хотите получить –

ответ

27

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

+0

Это именно то, что я ищу. Огромное спасибо! – Magnar

17

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

Если, вместо этого, вы только хотели, чтобы заполнить между У2 и У3:

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

это даст вам

enter image description here

+0

Обратите внимание, что этот ответ базируется исходный вопрос опубликован, _before_ редактирование. – Hooked

4

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

Смежные вопросы