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

당신은 당신의 그림 하나 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

나는 "그 안에 구멍"을 이해하지 못한다고 생각합니다. 너를 속이기로 한 줄 알았는데. 구멍의 크기는 내가 상상했던 것처럼 y1과 관련하여 y2를 어디에 두 었는지에 따라 결정됩니다. – Matt

4

matplotlib에 구멍이있는 폴리곤을 실제로 플로팅 할 수 있습니다. 트릭은 Path와 PathPatch를 사용하는 것입니다. 예를 들면 다음에 this example

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') 

상기 결과 (게시 할 수있는 이미지 아직). 권선 순서가 중요합니다.

관련 문제