2017-11-22 2 views
0

필자는 matlot/lat 흰색 및 검정색 '경계 상자'유형의 프레임에 대해 matplotlib 맵 주위의 기본 프레임 디자인을 변경하려고합니다. 예를 들어 검정색은 90W에서 45W까지, 흰색은 45W에서 0˚까지입니다.Matplotlib :베이스 맵 주변에 위도/경도 흰색/검정색 경계 상자 만들기

직사각형지도는 R 사용자 (http://menugget.blogspot.co.uk/2012/04/add-frame-to-map.html 참조)와 매우 비슷한 코드가 개발되었지만 파이썬 사용자에게는 아무 것도 없습니다.

파이썬에서 그 유형의 프레임 디자인을 허용하는 패키지가 있는지 아는 사람이 있습니까?

다음은 Python으로 남극 대륙을 플로팅하는 코드입니다. 코드 아래의 그림은 내가 달성하기를 원하는 것과 동일한 R을 보여줍니다.

코드 :

import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.basemap import Basemap 

fig = plt.figure(figsize=(11.7,8.3)) 

plt.subplots_adjust(left=0.05,right=0.95,top=0.90,bottom=0.05,wspace=0.15,hspace=0.05) 
ax = plt.subplot(111) 

x1 = -180 
x2 = 180 
y1 = -90 
y2 = 90 

m = Basemap(projection='spstere', llcrnrlat=y1,urcrnrlat=y2,llcrnrlon=x1,urcrnrlon=x2,boundinglat=-63,lon_0=180, resolution='l',round=True) 
m.drawmeridians(np.arange(0,360,60),labels=[1,1,1,1],linewidth=0.5, fontsize=10, dashes=[1,5]) 
m.drawparallels(np.arange(-90,90,20),linewidth=0.5, fontsize=10, dashes=[1,5]) 
m.drawcoastlines(linewidth=0.5) 

fig.show() 

enter image description here

답변

2

나는이 특히 강력 확실하지 않다, 그러나 당신의 예를 들어 작동하고,베이스 맵 내 첫번째 진짜 경험 (매핑을 조금했을했다 전에).

from matplotlib.patches import Wedge 
def draw_round_frame(m, width_percent=0.05, degree=45): 
    centre_x = (ax.get_xlim()[0] + ax.get_xlim()[1])/2 
    centre_y = (ax.get_ylim()[0] + ax.get_ylim()[1])/2 
    width = abs(centre_x) * width_percent 

    inner_radius = abs(centre_x) - width/2 
    outer_radius = inner_radius + width 

    angle_breaks = list(range(0, 361, degree)) 

    for i, (from_angle, to_angle) in enumerate(list(zip(angle_breaks[:-1], angle_breaks[1:]))): 
     color='white' if i%2 == 0 else 'black' 
     wedge = Wedge((centre_x, centre_y), outer_radius, from_angle, to_angle, width=outer_radius - inner_radius, 
         facecolor=color, 
         edgecolor='black', 
         clip_on=False, 
         ls='solid', 
         lw=1) 
     ax.add_patch(wedge) 

그것은 아마지도가보다 더 좌표를 사용해야 만 fig.show()

draw_round_frame(m) 
plt.show() 

round map frame

전에 전화 만 사용하고,이 축을 겹쳐 나는 현재 수 없습니다 지도 자체 주위에 더 많은 공간을 추가하는 방법을 생각해보십시오.하지만 처음부터 아이디어를 얻을 수 있습니다.

+0

대단히 감사하겠습니다. 경계선 값 (-63에서 -62까지)을 조정하여 외곽선과 프레임 사이에 더 많은 공간을 확보하고 프레임의 width_percent 값을 0.05에서 0.02로 줄였습니다. 그건 속임수 야. – jb16006