Я пытаюсь заполнить полигон цветом в базовой карте. Но я всегда получал ошибку get_axis_bgcolor function was deprecated in version 2.0
и цвет не отображался. Я использовал pip install basemap
и conda install -c conda-forge basemap
для переустановки basemap
, как указано в здесь в python3.6. Шейп-файл можно найти здесь. А исходные шейп-файлы предоставлены здесь.
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
from matplotlib.patches import Polygon
import shapefile
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111)
m = Basemap(projection = 'mill', llcrnrlat=40.47,urcrnrlat=40.95,\
llcrnrlon=-74.28,urcrnrlon=-73.70,resolution='f') # mill = Miller cylindrical cordinates, resolution c or f
m.drawcoastlines()
# m.drawcounties()
m.drawrivers()
m.fillcontinents(color='w', lake_color = 'lightslategrey')
m.drawmapboundary()
m.readshapefile('~/Desktop/Capstone2017/taxi_zones/taxi_zones_WGS84','taxi_zones_WGS84')
sf=shapefile.Reader('~/Desktop/Capstone2017/taxi_zones/taxi_zones_WGS84')
shape_ex = sf.shape(13)
x_lon = np.zeros((len(shape_ex.points)))
y_lat = np.zeros((len(shape_ex.points)))
for ip in range(len(shape_ex.points)):
x_lon[ip] = shape_ex.points[ip][0]
y_lat[ip] = shape_ex.points[ip][1]
region = np.dstack((x_lon, y_lat))[0]
poly = Polygon(region, facecolor='r', edgecolor='k')
ax.add_patch(poly)
Полная трассировка сообщения об ошибке:
/Users/miniconda3/lib/python3.6/site-packages/mpl_toolkits/basemap/__init__.py:1707: MatplotlibDeprecationWarning: The get_axis_bgcolor function was deprecated in version 2.0. Use get_facecolor instead.
if self.projection not in ['geos','ortho','nsper']:
/Users/miniconda3/lib/python3.6/site-packages/mpl_toolkits/basemap/__init__.py:1563: MatplotlibDeprecationWarning: The get_axis_bgcolor function was deprecated in version 2.0. Use get_facecolor instead.
x = len(yy)*[self.xmin]; y = yy.tolist()
Мой результат выглядит следующим образом:
Почему вы читаете шейп-файл дважды? Не могли бы вы каким-то образом сделать свой шейп-файл доступным, чтобы ваш код можно было запускать?
Первое чтение заключалось в том, чтобы нанести все фигуры на карту, а второе — попытаться раскрасить одну из них. Есть ли лучший способ приблизиться к нему?