如何仅在Basemap国家/地区范围内绘制数据

时间:2014-09-05 15:40:44

标签: python matplotlib matplotlib-basemap

对于下面的代码,除了安装相关模块外,您还需要下载并解压缩文件" nationp010g.shp.tar.gz"可以找到here。此文件是美国的形状文件。如果有人有更好的方式来显示这些边界,请务必建议它!

对于我下面的测试用例,我已经成功地在美国着色了。我想要做的是绘制等高线图,好像只允许美国的陆地部分。我不知道如何在不使用循环遍历所有坐标的繁琐for循环的情况下如何实现这一点,并检查所讨论的坐标是否在形状文件给出的多边形内。完成我想要的最好的方法是什么?结果如下:

enter image description here

from __future__ import print_function


import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap as Basemap
from matplotlib.colors import rgb2hex
from matplotlib.patches import Polygon

m = Basemap(llcrnrlon=-119,llcrnrlat=22,urcrnrlon=-64,urcrnrlat=49,
            projection='lcc',lat_1=33,lat_2=45,lon_0=-95)

shp_info = m.readshapefile('nationp010g/nationp010g', 'borders', drawbounds=True) 


print(dir(m)) #List all attributes of an object
ax = plt.gca()
color = 'blue'
for nshape,seg in enumerate(m.borders):
    poly = Polygon(seg,facecolor=color,edgecolor=color)
    ax.add_patch(poly)

xmax, ymax = m(m.lonmax, m.latmax )
xmin, ymin = m(m.lonmin, m.latmin)

y = np.linspace(ymin,ymax,100)
x = np.linspace(xmin, xmax, 100)
X, Y = np.meshgrid(x, y)
Z = (X-(xmax-xmin)/2)**2+(Y-(ymax-ymin)/2)**2

ax.contour(X,Y, Z, cmap=plt.get_cmap('coolwarm'))
plt.show()

0 个答案:

没有答案