我正在尝试更改我的matplotlib地图周围的默认框架的设计,用于lon / lat白色和黑色圆形边界框'框架的类型,例如,黑色从90度W延伸到45度W,白色从45W延伸到0度等。
为R用户开发了一个非常相似的代码(请参阅:http://menugget.blogspot.co.uk/2012/04/add-frame-to-map.html)以获取矩形地图,但我没有为Python用户找到任何内容。
有没有人知道Python中是否有允许这种类型的框架设计的包?
下面是我在python中绘制Antarctica的代码。代码下方的图显示了我想要实现的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()
答案 0 :(得分: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()
它应该比它更多地使用地图坐标,并且它与轴重叠,因为我目前无法想象一种在地图周围添加更多空间的方法,但可能会给你一个开头的想法。