[当我在python中使用底图时,有时会颠倒经度,翻转地图

问题描述 投票:2回答:1

在python中,我使用底图(https://matplotlib.org/basemap/)绘制空间数据,并且已经使用了几年,没有任何大问题。我最近不得不重新安装python3(通过conda以及许多模块),现在底图出现了一个奇怪的问题:在某些情况下,地图将以经度翻转,向东和向西切换的方式显示。例如,我使用以下代码:https://matplotlib.org/basemap/users/robin.html。如果我按原样使用该代码,则地图显示正常,但是当我设置lon_0 = 180时,地图将被翻转,如下图所示。

Image of map problem

将lon_0设置为任何正数会导致地图翻转,而0或负数会导致正确的地图。 lon_0应该只设置绘制地图的中心经度,并且不应该有这种行为,所以我不确定发生了什么。有没有人以前见过这种行为,或者对如何解决它有建议?我可以更改代码以解决该问题,但是我希望事情能够正常进行。

我正在使用python3.7.3。我已经尝试使用命令“ conda install -c anaconda底图”更新底图,但是它告诉我底图已经是最新的。

这里是代码。它与上面链接的代码相同,但是lon_0设置为180。

from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
# lon_0 is central longitude of projection.
# resolution = 'c' means use crude resolution coastlines.
m = Basemap(projection='robin',lon_0=180,resolution='c')
m.drawcoastlines()
m.fillcontinents(color='coral',lake_color='aqua')
# draw parallels and meridians.
m.drawparallels(np.arange(-90.,120.,30.))
m.drawmeridians(np.arange(0.,360.,60.))
m.drawmapboundary(fill_color='aqua')
plt.title("Robinson Projection")
plt.show()

当我运行代码时,唯一的输出是这个,这似乎无关:

map_test.py:36:MatplotlibDeprecation警告:dedent函数在Matplotlib 3.1中已弃用,在3.3中将被删除。请改用inspect.cleandoc。m =底图(projection ='robin',lon_0 = 180,resolution ='c')

有什么想法吗?

python matplotlib maps matplotlib-basemap
1个回答
1
投票

这应该可以解决问题。只需在创建轴后添加以下内容即可:

# Matplotlib >= 3.1.0 (introduced "set_inverted")
ax.xaxis.set_inverted(False)

# Matplotlib < 3.1.0 (this is just the source code for "set_inverted")
interval = ax.xaxis.get_view_interval()
ax.set_xlim(sorted(interval), auto=None)

经过一番反复试验后,似乎也选择了[[负中心经度而不是正经度:

m = Basemap('robin', lon_0=-180)
© www.soinside.com 2019 - 2024. All rights reserved.