2012-01-19 10 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

あなたはあなたの姿1 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

のように動作しますあなたが望むものがあるまでは、一度に。

またはおそらく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上記結果(まだ画像を投稿することはできません)。 巻線の順序が重要であるように見えることに注意してください。

関連する問題