2012-01-19 149 views
0

我正在從GIS數據庫讀取數據,並使用mpl_toolkits.basemap和matplotlib創建地圖。一些數據創建複雜的多邊形(由外部和內部環定義)。但是,我一直無法找到如何創建帶孔的多邊形。這甚至可能與matplotlib?是否有另一種方法來創建這個圖像?如何繪製複雜的多邊形?

回答

1

老問題,但...

就明確地關閉您的內部和外部邊界和它們一起求和。從技術上講,會有一個接縫,但你不會看到它(如果你提供了一個顏色參數 - 不完全確定爲什麼這樣)。

#!/usr/bin/env python3 

import matplotlib.pyplot as plt 

# a 4x4 box (counterclockwise) 
ext_x = [2, -2, -2, 2, 2] 
ext_y = [2, 2, -2, -2, 2] 

# a 2x2 hole in the box (clockwise) 
int_x = [item/2.0 for item in ext_x][::-1] 
int_y = [item/2.0 for item in ext_y][::-1] 

# if you don't specify a color, you will see a seam 
plt.fill(ext_x+int_x, ext_y+int_y, color='blue') 

plt.show() 
0

fill_between()怎麼樣?

http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.fill_between

我不知道究竟是如何拉過一個多邊形,但它的工作原理是這樣

import numpy as np 
import matplotlib.pylab as plt 

x=np.arange(-3,3.5,.5) 
y1=-x**2+9 
y2=-x**2+10 
plt.fill_between(x,y1,y2) 

results

您應該能夠建立你的身材一個fill_between一次直到你有你想要的。

或可能的path。看看這些screenshots,看看有沒有什麼東西似乎接近。

編輯:您可能意味着一個孔這樣

import numpy as np 
import matplotlib.pylab as plt 

x=np.arange(-3,3.5,.5) 
y1=-x**2+9 
y2=0 
plt.fill_between(x,y1,y2) 
circ=plt.Circle((0,4),2,color='w') 
ax=plt.gca() 
ax.add_patch(circ) 
plt.show() 

enter image description here

+1

這絕對會創建一個多邊形,但不是一個帶有洞的多邊形。 –

+0

我不認爲我理解「洞」。我以爲你的意思是空洞的。正如我想象的那樣,洞的大小將取決於y2與y1的關係。 – Matt

4

實際上,您可以在matplotlib中繪製帶有孔的多邊形。訣竅是使用Path和PathPatch。例如:

import matplotlib.pyplot as plt 
from matplotlib.patches import PathPatch 
from matplotlib.path import Path 

axes = plt.gca() 

path = Path([(2,2)  ,(2,-2)  ,(-2,-2) ,(-2,2)  ,(0,0)   ,(1,0)  ,(-1,1)  ,(-1,-1) ,(0,0)   ], 
      [Path.MOVETO,Path.LINETO,Path.LINETO,Path.LINETO,Path.CLOSEPOLY,Path.MOVETO,Path.LINETO,Path.LINETO,Path.CLOSEPOLY]) 
patch = PathPatch(path) 
axes.set_xlim(-3,3) 
axes.set_ylim(-3,3) 
axes.add_patch(patch) 

plt.savefig('example.png') 
plt.close('all') 

this example上述結果(不能發佈圖像尚未)。 請注意,纏繞順序似乎很重要。