在使用Basemap.contour
時發生某些投影時,我遇到了問題。根據給出的例子in the Basemap documentation,我創建了下面的工作代碼,它產生了預期的結果。該示例使用'tmerc'投影。在使用某些投影時使用Basemap.contour()時發生IndexError
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
注意當我將lon
和lat
的值「正確」定義時,也會發生這種情況,因此只選擇了儘可能短的示例。有人知道如何解決這個問題嗎?
編輯:
在這種情況下是相關的,我使用python
版本3.5.3的osx
塞拉利昂的機器上。 matplotlib
版本是2.0.0,而basemap
版本是1.0.7。
我不能重現這個錯誤,而不是調用
Basemap.contour
,人們可以在Basemap
的Axes
情況下直接調用contour
,用'Basemap(projection ='kav7',lon_0 = 0)'運行代碼'爲我生成[this image](https://i.stack.imgur.com/7vqHr.png)。 – ImportanceOfBeingErnest@ImportanceOfBeingErnest我明白了。這可能是一個實施問題?我在'osx'上,所有相關的軟件包都與macports一起安裝。 –
我不知道。該錯誤似乎來自底圖內。我有版本1.1.0。 – ImportanceOfBeingErnest