Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python3.6.1中将某些投影与basemap和contourf一起使用时的索引器_Python_Python 3.x_Matplotlib Basemap_Map Projections_Index Error - Fatal编程技术网

在Python3.6.1中将某些投影与basemap和contourf一起使用时的索引器

在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

我在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_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, :]