2013-05-07 143 views
20

我想在matplotlib.pyplot的3行之間填寫,但不幸的是fill_between給我機會只填寫兩行。任何想法如何處理這個?Matplotlib在多行之間填充

編輯:

好吧,我沒有解釋什麼,我真正的意思,因爲我不能以這種方式與我目前的聲譽添加的圖片,所以也許:

我試圖填補由這些線圍成的多邊形我不知道這是因爲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

你能否詳細說明的問題,並提供一些模擬數據和/或要獲得 – 2013-05-07 12:03:27

回答

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 2013-05-07 19:40:13

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

相反,如果你只是想Y2和Y3之間填充:

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

這將給你

enter image description here

+0

請注意,這個答案是基於關閉的內容示例原始問題發佈後,_before_編輯。 – Hooked 2013-05-07 18:40:57

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