在Python3.6.1中将某些投影与basemap和contourf一起使用时的索引器
我在Ubuntu 16.4上使用Python3.6.1 64位、Qt5.6.2、PyQt5 5.6,Basemap版本为1.0.7、matplotlib 2.0.2。当我尝试将轮廓图与底图一起使用时,使用投影“cyl”,例如:在Python3.6.1中将某些投影与basemap和contourf一起使用时的索引器,python,python-3.x,matplotlib-basemap,map-projections,index-error,Python,Python 3.x,Matplotlib Basemap,Map Projections,Index Error,我在Ubuntu 16.4上使用Python3.6.1 64位、Qt5.6.2、PyQt5 5.6,Basemap版本为1.0.7、matplotlib 2.0.2。当我尝试将轮廓图与底图一起使用时,使用投影“cyl”,例如: from mpl_toolkits.basemap import Basemap import matplotlib.pyplot as plt import numpy as np map = Basemap(projection='cyl',lat_0=45,lon
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
map = Basemap(projection='cyl',lat_0=45,lon_0=-100,resolution='c')
nlats = 73; nlons = 145; delta = 2.*np.pi/(nlons-1)
lats = (0.5*np.pi-delta*np.indices((nlats,nlons))[0,:,:])
lons = (delta*np.indices((nlats,nlons))[1,:,:])
wave = 0.75*(np.sin(2.*lats)**8*np.cos(4.*lons))
mean = 0.5*np.cos(2.*lats)*((np.sin(2.*lats))**2 + 2.)
x, y = map(lons*180./np.pi, lats*180./np.pi)
cs = map.contour(x,y,wave+mean,15,linewidths=1.5)
plt.show()
我得到以下错误:
回溯(最近一次呼叫最后一次):
文件“”,第15行,在
cs=地图等高线(x,y,波+平均值,15,线宽=1.5)
文件
“/home/gab/anaconda3/lib/python3.6/site packages/mpl_工具包/basemap/init.py”,
第521行,带_变换
返回plotfunc(self、x、y、data、*args、**kwargs)
文件
“/home/gab/anaconda3/lib/python3.6/site packages/mpl_工具包/basemap/init.py”,
第3542行,等高线
xx=x[x.shape[0]/2,:]
索引器:仅整数、片(:
)、省略号(…
),
numpy.newaxis(None
)和整数或布尔数组是有效的索引
例如,如果使用投影“正交”,则不会发生此错误。在Python2.6上运行此代码没有问题。这个问题似乎与相同,但没有得到回答
有什么想法吗?这种行为是python3整数除法的结果。 例如: 1) 蟒蛇3:
n=100
print (n/2, (n+1)/2)
输出:50.050.5
2) 对于python 2.7,此代码返回50
解决方案:
1) 为python3手动更新带有分区的基线图行
您必须编写整数n:n//2
,它是python2的除法
2) 或者使用python2运行程序。响应lanadaquenada(我似乎无法回答) 根据Serenity的帖子,您实际上需要修改basemap代码,而不是您的代码。Basemap很旧,不再真正受支持。它是在Python2.x发布时创建的,似乎它使用了Python2整数除法。 Python3现在可以“正确”地进行除法,但创建一些旧代码是为了利用Python2除法 在使用python3和matplotlib1.5.3时,我会收到一个关于这个问题的警告,但这并不是致命的。升级到matplotlib 2.0.2后,这个错误变得致命,我的谷歌搜索结果导致了你的帖子 因此,遵循宁静的建议,你需要 使用手动更改行
xx[x.shape[0]/2, :]
到
对我来说,这是在路径中的3452和3644,其中安装了您的python库/site packages/mpl\u工具包/basemap/\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
我使用的是basemap版本1.0.7
从matplotlib 1.5.3版过渡到2.0.2版时,我需要进行此更改
这阻止了我的代码崩溃,我对旧matplotlib版本的基本测试似乎产生了正确的结果
我希望这不会在其他地方产生意外的后果,尽管basemap是用旧的整数除法设计的,所以我认为它是可以的我不知道如何应用解决方案1。你能在我的例子中进一步解释一下怎么做吗?谢谢安装蟒蛇。非常感谢!:)这解决了我的问题。如果这对其他人有帮助,我使用anaconda,文件位于~/anaconda3/lib/python3.6/site packages/mpl_toolkit/basemap/_init_;.py
xx[x.shape[0]//2, :]