Есть ли способ получить базовую карту matplotlib с использованием North Polar Stereographi c Projection для построения диапазона широты / долготы, который не включает полюс? - PullRequest
0 голосов
/ 13 июля 2020

В настоящее время график дает мне следующее:

enter image description here

Using:

from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
# setup north polar stereographic basemap.
# The longitude lon_0 is at 6-o'clock, and the
# latitude circle boundinglat is tangent to the edge
# of the map at lon_0. Default value of lat_ts
# (latitude of true scale) is pole.
m = Basemap(projection='npstere',boundinglat=55,lon_0=-47,resolution='l') #llcrnrlon=-55.,llcrnrlat=60.,urcrnrlon=-40.,urcrnrlat=65.,
#x,y = m(lon2,lat2)
m.drawcoastlines()
m.fillcontinents(color='white',lake_color='aqua')
# draw parallels and meridians.
m.drawparallels(np.arange(-80.,81.,20.))
m.drawmeridians(np.arange(-180.,181.,20.))
m.drawmapboundary(fill_color='aqua')
# draw tissot's indicatrix to show distortion.
ax = plt.gca()
for y in np.linspace(m.ymax/20,19*m.ymax/20,10):
    for x in np.linspace(m.xmax/20,19*m.xmax/20,10):
        lon, lat = m(x,y,inverse=True)
        poly = m.tissot(lon,lat,2.5,100,\
                        facecolor='green',zorder=10,alpha=0.5)
plt.title("North Polar Stereographic Projection")
plt.show()

I'd like to be able to zoom in on a part of Greenland particularly, in other words to be able to set the bounding corners of the map to specific latitudes and longitudes. Is this possible? The current projection is too zoomed out.

I'd like something like what this code gives me using Lambert Conformal Conic

m = Basemap(llcrnrlon=-60.,llcrnrlat=60.,urcrnrlon=-40.,urcrnrlat=70.,
            projection='lcc',lat_1=20.,lat_2=40.,lon_0=-60.,
            resolution ='l',area_thresh=1000.)
m.drawcoastlines()
m.drawcountries()
m.drawmapboundary(fill_color='#99ffff')
m.fillcontinents(color='#cc9966',lake_color='#99ffff')
m.drawparallels(np.arange(10,70,20),labels=[1,1,0,0])
m.drawmeridians(np.arange(-100,0,20),labels=[0,0,0,1])
plt.title('ICESAT2 Tracks in Greenland')
plt.show()

Which gives:

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

Но в северной полярной стереографии c конечно. Есть идеи?

1 Ответ

0 голосов
/ 24 июля 2020

То, что вы просили, невозможно с базовой картой Matplotlib. Вам следует начать использовать вместо него cartopy. Вот пример того, как cartopy может построить нужную вам карту.

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy
import cartopy.feature as cfeature

fig = plt.figure(figsize=(5, 8))
ax = fig.add_subplot(111, projection=ccrs.NorthPolarStereo(central_longitude=-47))     

ax.set_extent([-55, -42, 59, 70], crs=ccrs.PlateCarree())

resol = '50m'  # use data at this scale
land = cartopy.feature.NaturalEarthFeature('physical', 'land', \
    scale=resol, edgecolor='k', facecolor=cfeature.COLORS['land'])
ocean = cartopy.feature.NaturalEarthFeature('physical', 'ocean', \
    scale=resol, edgecolor='none', facecolor=cfeature.COLORS['water'])

# plot sequence is important
ax.add_feature(ocean, linewidth=0.2 )
ax.add_feature(land, facecolor='green')

ax.set_title('central_longitude on -47 $^\circ$W')

# for cartopy version 0.18 only
ax.gridlines(draw_labels=True, linewidth=0.5, linestyle='--', color='black')

plt.show()

Выходной график:

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

...