2017-01-19 16 views
-3

私は衛星データを使って簡単なプロットをプロットしようとしています。このデータには緯度、経度、および緯度(海面水位)が含まれています。私はこの例に使用されるデータは、これは私がして始めた実験をしようとしています簡単なスクリプトはここにあるhere位置しています: - 私は直面しています問題は、緯度と経度が164の形状を含んでいることです何matplotlibを使用して異なる次元のデータをプロットする

#!/usr/bin/python3 
# -*- coding: utf-8 -*- 
from __future__ import print_function 
import os 
import platform 
import numpy as np 
from netCDF4 import Dataset 
import matplotlib.pyplot as plt 
from mpl_toolkits.basemap import Basemap 

width = 10 
height = 8 

nc_f = ('ctoh.sla.ref.RA2.medsea.0543.nc') 
nc_fid = Dataset(nc_f, 'r') 
lons = nc_fid.variables['lon'][:] 
lats = nc_fid.variables['lat'][:] 
sla = nc_fid.variables['sla'][:] 

lon_0 = lons.mean() 
lot_0 = lats.mean() 
lon_max = nc_fid.variables['lon'].lon_max 
lon_min = nc_fid.variables['lon'].lon_min 
lat_min = nc_fid.variables['lat'].lat_min 
lat_max = nc_fid.variables['lat'].lat_max 

m = Basemap(projection='merc', lat_0=lot_0, lon_0=lon_0, 
      resolution = 'l', llcrnrlon=lon_min, llcrnrlat=lat_min, 
      urcrnrlon=lon_max, urcrnrlat=lat_max) 
m.drawcoastlines() 
m.drawcountries(linewidth=1.0) 
# lons,lats= np.meshgrid(lons, lats) 
x, y = m(lons, lats) 
# plt.figure(figsize=(width, height), frameon=False) 
# plt.contourf(x, y, sla) 
print(y.shape) 
print(x.shape) 
print(sla.shape) 
cs = m.contourf(x, y, sla) 
plt.contourf(np.reshape(x, sla.shape), np.reshape(y, sla.shape), sla) 
plt.show() 

ベースマップ上にプロットされる実際の変数は(164,83)の形を含む。

(164,) 
(164,) 
(164, 83) 
Traceback (most recent call last): 
    File "satellite.py", line 39, in <module> 
    cs = m.contourf(x, y, sla) 
    File "/home/sundar/.anaconda2/lib/python2.7/site-packages/mpl_toolkits/basemap/__init__.py", line 521, in with_transform 
    return plotfunc(self,x,y,data,*args,**kwargs) 
    File "/home/sundar/.anaconda2/lib/python2.7/site-packages/mpl_toolkits/basemap/__init__.py", line 3644, in contourf 
    xx = x[x.shape[0]/2,:] 
IndexError: too many indices for array 

これは私がdiffent寸法/形状のデータを取り扱っております初めてです - :ここで私は、端末に持っている完全なエラーメッセージがあります。これらの異なる形状のデータはどのようにプロットされますか?

+1

私は少し混乱しています。正確にプロットしようとしているのは何ですか?私が正しく理解していると、各ペアに164の緯度/経度ペアと83のデータポイントがありますか?それらの83点はどのように解釈されるべきですか? – roganjosh

+0

実際、この例を見ると[docs](http://basemaptutorial.readthedocs.io/en/latest/plotting_data.html#contourf)のヘルプが表示されます。サンプルデータソース( 'osgeo'ライブラリがインストールされている必要があるようです)を調べる価値があります。私は 'matplotlib'から他のすべての獣であることが分かったので、' matplotlib'から 'basemap'に質問名を変更することも考えています。 – roganjosh

+0

あなたはしません。 '* X *と* Y *は両方とも* Z *と同じ形の2次元でなければならない、あるいは は' 'len(X)' 'が1次元でなければなりません。 * Z *と '' len(Y) ''の列数は、* Z *の行数です。 – Goyo

答えて

2

私が正しくBasemap.contourfの文書を理解していれば、あなたは、非構造化データのためのtriキーワード引数を使用する必要があります:あなたのデータが何であるかに応じて、

cs = m.contourf(lon, lat, sla, tri=True) 

または多分

cs = m.contourf(x,y, sla, tri=True) 

を。

+0

私の質問に誰が投票したのか分かりません。彼らが理解していない場合、彼らは明確化を求めていたはずです。あなたは私に正しい答えをくれました。間違いを指摘していただきありがとうございます。 –

+0

あなたの質問に投票した3人は、直接[MCVE]ではないコードの束の中に隠されている本当の問題を見ることができなかったと思います。一見したところでは、もちろん不可能なmatplotlibs 'contourf'を使ってさまざまな形のデータをプロットする方法を尋ねているように思えるかもしれませんし、誰かが質問をしなくてもそれを見つけられるかもしれません。 matplotlibsの 'contourf'とは違う' Basemap.contourf'を使っているという事実を置くことは、それを防ぐかもしれません。 – ImportanceOfBeingErnest

関連する問題