Я пытаюсь построить простой сюжет с использованием спутниковых данных. Эти данные содержат lat, lon и sla (аномалия уровня моря). Данные, которые я использовал для этого примера находится here Это простой скрипт я пытаюсь начали экспериментировать с здесь: -Данные, имеющие разные размеры с использованием 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 и фактическая переменная, которая должна быть построена на базовой карте, содержит форму (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 размеров/формой. Как эти данные имеют разные формы?
Я немного смущен, что именно вы пытаетесь построить? Если я правильно понимаю, у вас есть 164 пары lat/lon и 83 точки данных в каждой паре? Как эти 83 точки должны быть интерпретированы? – roganjosh
Собственно, просмотр этого примера может помочь из [docs] (http://basemaptutorial.readthedocs.io/en/latest/plotting_data.html#contourf). Возможно, стоит рассмотреть пример источника данных (который, как представляется, требует наличия библиотеки 'osgeo'). Я бы также подумал об изменении имени вопроса с 'matplotlib' на' basemap', потому что я нашел, что это целый зверь из 'matplotlib'. – roganjosh
У вас нет. Это ясно указано в docstring: '* X * и * Y * должны быть двухмерными с той же формой, что и * Z *, или они должны быть равны 1-D таким образом, чтобы' 'len (X)' ' число столбцов в * Z * и '' len (Y) '' - количество строк в * Z * .' – Goyo