Для приведенного ниже кода, помимо установки соответствующих модулей, вам потребуется загрузить и распаковать файл "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()
Line2D
художников. у этих артистов должен быть метод, похожий наset_clip_path
. Почти уверен, что вы можете установить это для исполнителя шейп-файла. Что-то такое. - person Paul H   schedule 05.09.2014