靠近北极的python底图

时间:2018-11-26 13:31:19

标签: matplotlib-basemap

我想使用底图绘制一些向北的数据。不幸的是我无法显示子午线。我认为这是因为未在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()

产生此图:

enter image description here

但我希望也显示子午线。该怎么做?

1 个答案:

答案 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()

结果图:

enter image description here