正投影 Python
我用正交投影来绘制地图。
我使用这个程序:
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
import os, sys
from sys import argv
import pylab
from mpl_toolkits.basemap import Basemap, shiftgrid
from matplotlib import mpl
from matplotlib import rcParams
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import matplotlib.patches as patches
import matplotlib.path as path
import matplotlib.dates as dt
from numpy import linalg
import netCDF4
import time
import datetime as d
import sys
import math
from mpl_toolkits.axes_grid1 import make_axes_locatable
from pylab import *
nc = netCDF4.Dataset ('tt.nc')
latvar = nc.variables['lat']
lat = latvar[:]
lon = nc.variables['lon'][:]
lat_0=30;lon_0=-25
m1 = Basemap(projection='ortho',lon_0=-25,lat_0=30,resolution='l')
m = Basemap(projection='ortho',lon_0=lon_0,lat_0=lat_0,resolution='l',\
llcrnrx=0.,llcrnry=0.,urcrnrx=m1.urcrnrx/2.,urcrnry=m1.urcrnry/2.)
X, Y = m(lon, lat)
O_x_1=nc.variables['O3']
h=9
lev=0
minOzone=0
maxOzone=40
plotOzone = m.pcolor(X,Y,O_x_1[h,lev,:,:],vmin=minOzone,vmax=maxOzone)
ax=colorbar(plotOzone, shrink=0.8,norm=(0,40))
m.drawcoastlines()
m.drawparallels(np.arange(-90.,120.,30.))
m.drawmeridians(np.arange(0.,420.,60.))
plt.show()
我该怎么做才能把我的地图中心放在欧洲呢?
我已经尝试过调整lat_0和lon_0,但结果并不是我想要的……
我无法添加图形来展示我得到的结果和我想要的效果……
谢谢!
1 个回答
5
lat_0 和 lon_0 是用来设置地图投影的起点,而不是地图的范围。通常来说,起点应该选择失真最小的地方,所以你不希望起点偏离你关注区域的中心太远。如果你不指定地图的范围,Basemap 会自动把地图中心放在这个起点上。
如果你知道想要的范围(或者叫边界框),可以把地图中心调整到你想要的位置。这意味着如果你知道在“正射投影”中的角落坐标,就可以使用你例子中的一些关键词(比如 llcrnrx 等)。不过在 Basemap 1.0.6 版本中,我用 'llcrnrlon' 这些关键词没有成功,它们似乎是让你输入地理坐标(经纬度)来定义范围。
另外一种方法是直接获取坐标轴,然后手动设置 x 和 y 的限制。这样做的好处是你可以在声明 Basemap 对象之后再进行设置,这样你就可以用它来进行坐标转换。下面是一个例子:
from mpl_toolkits.basemap import Basemap
fig = plt.figure(figsize=(5,5))
m = Basemap(projection='ortho',lon_0=5,lat_0=35,resolution='l')
m.drawcoastlines()
m.drawparallels(np.arange(-90.,120.,15.))
m.drawmeridians(np.arange(0.,420.,30.))
# your extent in lat/lon (dec degrees)
ulx = -10
uly = 65
lrx = 65
lry = 35
# transform coordinates to map projection
xmin, ymin = m(ulx, lry)
xmax, ymax = m(lrx, uly)
# set the axes limits
ax = plt.gca()
ax.set_xlim(xmin, xmax)
ax.set_ylim(ymin, ymax)
确保在地图声明中选择的投影符合你的需求,我选择了一个位于欧洲的起点。