首页 > 解决方案 > 靠近北极的python底图

问题描述

我想使用底图绘制一些远在北方的数据。不幸的是,我无法显示经络。我认为这是因为它们没有显示在 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()

这产生了这个数字:

在此处输入图像描述

但我希望经络也能显示出来。这个怎么做?

标签: matplotlib-basemap

解决方案


您的发现是 Basemap 中存在的许多缺点中的一部分。这就是创建 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()

结果图:

在此处输入图像描述


推荐阅读