Как отображать данные только в пределах региона страны Basemap

Для приведенного ниже кода, помимо установки соответствующих модулей, вам потребуется загрузить и распаковать файл "nationp010g.shp.tar.gz", который можно найти здесь. Этот файл представляет собой шейп-файл Соединенных Штатов. Если у кого-то есть лучший способ отображения этих границ, обязательно предложите его!

Для моего тестового примера ниже мне удалось раскрасить синий цвет Соединенных Штатов. Что я хочу сделать, так это построить контурные участки, как будто разрешены только участки суши в США. Я не уверен, как это можно сделать без использования утомительного цикла for, который перебирает все координаты и проверяет, находится ли рассматриваемая координата внутри многоугольника, заданного файлом формы. Каков наилучший способ добиться того, чего я хочу? Вот результат:

введите здесь описание изображения

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

person Dipole    schedule 05.09.2014    source источник
comment
функция контурной обработки должна возвращать список Line2D художников. у этих артистов должен быть метод, похожий на set_clip_path. Почти уверен, что вы можете установить это для исполнителя шейп-файла. Что-то такое.   -  person Paul H    schedule 05.09.2014
comment
Спасибо, плохо посмотрю на это!   -  person Dipole    schedule 05.09.2014
comment
Я поиграл с этой идеей, но столкнулся с некоторыми проблемами. Я создал новый вопрос для этой более конкретной проблемы, найденной по адресу: stackoverflow.com/questions/25701321/   -  person Dipole    schedule 07.09.2014