2016-07-07 5 views
1

太平洋を中心とした南半球の地図を、python matplotlibベースマップで描いたものでプロットしたいと思います。Python Basemap:shadedrelief、bluemarbleまたはetopo(間違った経度形式ですか?)を使用しているエラー

私がベースマップルーチンshadedrelief、bluemarbleまたはetopoで背景イメージを描こうとしない限り、すべてうまくいきます。 (私はマップ上に描画したいものなし)コード次のようになります。私はm.shadedreliefのコメントを解除する場合

import numpy as np 
from mpl_toolkits.basemap import Basemap 
from matplotlib.backends.backend_pdf import PdfPages 

latmin = -72.5 
latmax = 40. 
lonmin = 60. 
lonmax = 370. 

pp = PdfPages('datamap.pdf') 

m = Basemap(projection='merc', llcrnrlat=latmin, urcrnrlat=latmax, llcrnrlon=lonmin, urcrnrlon=lonmax, resolution="c") 

m.drawcoastlines(linewidth=0.25) 
#m.shadedrelief() 

pp.savefig() 
pp.close() 

()私は、次を得る:

--------------------------------------------------------------------------- 
IndexError        Traceback (most recent call last) 
/xyz/datamap.py in <module>() 
    32 
---> 33 m.shadedrelief() 
    34 

/usr/local/lib/python2.7/site-packages/mpl_toolkits/basemap/__init__.pyc in shadedrelief(self, ax, scale, **kwargs) 
    3997    return self.warpimage(image='shadedrelief',ax=ax,scale=scale,**kwargs) 
    3998   else: 
-> 3999    return self.warpimage(image='shadedrelief',scale=scale,**kwargs) 
    4000 
    4001  def etopo(self,ax=None,scale=None,**kwargs): 

/usr/local/lib/python2.7/site-packages/mpl_toolkits/basemap/__init__.pyc in warpimage(self, image, scale, **kwargs) 
    4115     # any range of longitudes may be plotted on a world map. 
    4116     self._bm_lons = \ 
-> 4117     np.concatenate((self._bm_lons,self._bm_lons+360),1) 
    4118     self._bm_rgba = \ 
    4119     np.concatenate((self._bm_rgba,self._bm_rgba),1) 
IndexError: axis 1 out of bounds [0, 1) 

私が選択した場合(テスト目的のために)180度以上のすべての(シャドーリリーフを含む)より大きい経度を持たない小さなマップもうまくいきます。これは私に、経度の形式のものがここでは働いていないという前提につながります。私はいくつかのことを試しましたが、同じマップセクションをプロットしながらこれを解決する方法を見つけるように思われます。

私はマップの背景にどのように影付きぼかしを描くことができますか?

ベスト、

xilian

答えて

4

ベースマップ/ のinitコードにバグがあったようです。実際、githubの最新バージョン(https://github.com/matplotlib/basemap/blob/master/lib/mpl_toolkits/basemap/init.py#L4139を参照してください)と、あなたのエラーの4117行目とはどのように違うのですか?そのバグが既に解決されていることがわかります。

# np.concatenate((self._bm_lons,self._bm_lons+360),1) 
np.concatenate((self._bm_lons,self._bm_lons+360)) 
のinitの.pyコードで

またはベースマップの新しいバージョンを取得する:これはあなたがいずれかを実行できることを意味します。 2人のうちのいずれかがあなたの問題を解決します。

+0

ありがとうございます。最新のベースマップバージョンは私が使用している自家製のリポジトリにまだありませんので、4417の__init__.pyで "1"を "0"に変更しました。 –

関連する問題