私はpythonとmatplotlibを使用して特定のパラメータをプロットするためにgfs天気データに取り組んでいます。それはgrib2ファイルなので、私はファイルからデータを抽出するためにwgrib2を使用しています(私はpygribを認識しています)。これらの抽出された変数(緯度、経度、および温度)は、うんざりしています。私はあなたのレビューのためにlat、lonとdataの値を付けています。私はプロットのために使用していたコードの部分がある: -有効なnumpy配列がIndexErrorを生成します:
lat = # load from attached lat file
lon = # load from attached lon file
data = # load data from data file
plt.figure()
m = Basemap(projection='mill', lat_ts=10, llcrnrlon=lon.min(), urcrnrlon=lon.max(), llcrnrlat=lat.min(), urcrnrlat=lat.max(),
resolution='c')
x, y = m(lat, lon)
cs = m.contourf(x, y, data)
m.drawcoastlines()
m.fillcontinents()
m.drawmapboundary()
plt.show()
さて、私はプロットのためのmatplotlibのcountorf
機能を使用する場合、それは次のエラーを生成します -
File "wgrib2.py", line 145, in <module>
cs = m.contourf(x, y, data)
File "/usr/lib/python3.6/site-packages/mpl_toolkits/basemap/__init__.py", line 521, in with_transform
return plotfunc(self,x,y,data,*args,**kwargs)
File "/usr/lib/python3.6/site-packages/mpl_toolkits/basemap/__init__.py", line 3644, in contourf
xx = x[x.shape[0]/2,:]
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
は、誰かが解決するために私を助けることができますこの問題?要求されるようにここで
は、(実際のファイルは、上記のリンクでアップロードされている)、最小限の例である: -
#!/usr/bin/python2
# -*- coding: utf-8 -*-
from __future__ import print_function, unicode_literals, division
import os
import subprocess
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
lat = np.loadtxt("lat.txt")
lon = np.loadtxt("lon.txt")
data = np.loadtxt("data.txt")
plt.figure()
m = Basemap(projection='mill', lat_ts=10, llcrnrlon=lon.min(), urcrnrlon=lon.max(), llcrnrlat=lat.min(), urcrnrlat=lat.max(),
resolution='c')
x, y = m(lat, lon)
cs = m.contourf(x, y, data)
m.drawcoastlines()
m.fillcontinents()
m.drawmapboundary()
plt.show()
編集もう一度ファイルをアップロード1
。
データの次元に問題があるようです。 wgrib2からnumpy配列への出力は、lat、lon、およびdataの値が(259920、)の単一ディメンションです。私はpygribでチェックして、720 x 361 = 259920につながる(720、361)の形を生成します。したがって、データがnumpyに変換される問題があるようです。
外部データに依存しない[mcve]を作成してください。ちょうど "それのような"ものを使用してください。たぶん 'np.random.random()'は助けることができますか?また、「ベースマップ」とは何ですか? – MSeifert
'x.shape [0]/2'で判断すると、Python 3にPython 2パッケージをインストールしたようです。 – user2357112
@ user2357112、私はこれをpipしませんでした。これは、Arch Linuxの下でパッケージマネージャー、pacmanを使用するデフォルトのインストールです。 –