我想使用底图绘制一些向北的数据。不幸的是我无法显示子午线。我认为这是因为未在80度以北显示它们。有什么办法解决吗?
基本上,我使用以下代码:
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(num=None, figsize=(12, 8) )
m = Basemap(projection='poly', resolution=None,
lon_0=16, lat_0=81.8,
llcrnrlon=9.5, llcrnrlat=80,
urcrnrlon=22, urcrnrlat=82.5)
m.drawparallels(np.arange(80. ,82.5 ,0.5),labels=[True,False,False,False])
m.drawmeridians(np.arange(10.0, 22.0, 2.0),labels=[True,True,False,True])
m.drawmapboundary(fill_color='lightblue')
plt.show()
产生此图:
但我希望也显示子午线。该怎么做?
答案 0 :(得分:1)
您的发现是底图中存在的许多缺点中的一些。这就是创建Cartopy的原因。对于完成图的简单变通方法,可以使用plot()
函数来绘制丢失的子午线,如下所示。
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(num=None, figsize=(12, 8))
m = Basemap(projection='poly', resolution=None,
lon_0=16, lat_0=81.8,
llcrnrlon=9.5, llcrnrlat=80,
urcrnrlon=22, urcrnrlat=82.5)
m.drawparallels(np.arange(80.0, 83.0, 0.5), labels=[True,False,False,False])
# this does not fully work, only labels are rendered, but not lines
m.drawmeridians(np.arange(10.0, 22.0, 2.0), labels=[True,True,False,True])
# a workaround to get meridians plotted
phs = np.arange(80, 83, 0.05)
for ea in np.arange(8.0, 22.0, 2.0):
lds = np.ones(len(phs))*ea
m.plot(lds, phs, latlon=True, color="k", linewidth=0.5)
m.drawmapboundary(fill_color='lightblue')
plt.show()
结果图: