使用某些投影

时间:2017-06-13 11:07:00

标签: python python-3.x matplotlib matplotlib-basemap

使用Basemap.contour进行某些投影时,我遇到了问题。基于给定in the Basemap documentation的示例,我创建了以下工作代码,它产生了预期的结果。该示例使用'tmerc'投影。

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np


m2 = Basemap(projection='tmerc', 
              lat_0=0, lon_0=3,
              llcrnrlon=1.819757266426611, 
              llcrnrlat=41.583851612359275, 
              urcrnrlon=1.841589961763497, 
              urcrnrlat=41.598674173123)
##m2 = Basemap(projection='kav7',lon_0=0)

x = np.linspace(0, m2.urcrnrx, 100)
y = np.linspace(0, m2.urcrnry, 100)
xx, yy = np.meshgrid(x, y)
data = np.sin(xx/100)*np.cos(yy/100)

levels = np.linspace(-1,1,8)
m2.contour(xx, yy, data, levels)

plt.show()

但是,如果我切换到在替代m2=Basemap声明中使用'kav7'投影(在示例代码中注释掉),代码将失败,并显示以下错误:

Traceback (most recent call last):
  File "basemap_contour.py", line 20, in <module>
    m2.contour(xx, yy, data, levels)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/mpl_toolkits/basemap/__init__.py", line 521, in with_transform
    return plotfunc(self,x,y,data,*args,**kwargs)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/mpl_toolkits/basemap/__init__.py", line 3542, in contour
    xx = x[x.shape[0]/2,:]
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

请注意,当我正确定义lonlat值时,也会发生这种情况,该示例仅选择尽可能短。有人知道如何解决这个问题吗?

修改

如果这是相关的,我在python Sierra机器上使用osx版本3.5.3。 matplotlib版本为2.0.0,basemap版本为1.0.7。

3 个答案:

答案 0 :(得分:1)

此行为是根据python3整数除法。寻找例子:

1)python3:

n=100
print (n/2, (n+1)/2)

输出:50.0 50.5

2)对于python 2.7,此代码返回50 50

解决方案:

1)用python3的分区手动更新底图的轮廓和轮廓f函数。

你必须写整数nn//2,它是从python2应用除法。

2)或使用python2运行你的程序。

答案 1 :(得分:1)

我找到了一个非常简单的解决方法来解决这个问题。可以直接在Basemap.contour的{​​{1}}个实例上调用contour,而不是致电Axes

Basemap

这在Python 2.7和3.6下产生了以下图片:

result of the above code

答案 2 :(得分:0)

此错误已为fixed 2 years ago,并且在任何底图版本> = 1.1.0中都不会发生,与使用python 2或3无关。