matplotlib-basemap - 靠近北极的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()
这产生了这个数字:
但我希望经络也能显示出来。这个怎么做?
解决方案
您的发现是 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()
结果图:
推荐阅读
- crystal-lang - Crystal 模块路径需要问题
- react-router - react-snap 和 react-router 一起出问题
- ios - Xcode 9.2 构建失败且未显示任何错误
- c - Convert a string to an int with negative numbers
- javascript - 如何使用js在服务器的html中写入文件?
- php - 乘法如何比向左移位更快?
- android - 从 ListView 获取列表项
- python - 如何让聊天机器人开始听叫它的名字?
- c++ - 从函数而不是句子中获取随机数字和字母
- mule - API 的 RAML 中的 HTTP 响应正文类型