Как исправить недостаточно значений для распаковки (ожидалось 2, получено 1)?

У меня нулевой опыт в программировании. Я пытаюсь что-то закодировать для своего класса, и он выдает ошибку «недостаточно значений для распаковки (ожидалось 2, получено 1)». Что может быть не так с моими кодами?

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import shapefile as shp

#Read x, y, z file
data = pd.read_excel('RegionV.xlsx', header = None)

# Get X, Y, Z values from file
data = np.array(data)
data = data.astype(np.float)
x = data[:,0]
y =  data[:,1]
z = data[:,2]

#Mask negative values of z (bathemetry)
zz = np.ma.masked_where(z <= 0, z)


#Create a map using basemap
fig = plt.figure(figsize=(10,10))
map = Basemap(projection='mill',llcrnrlat=11,urcrnrlat=15,\
            llcrnrlon=122,urcrnrlon=125,resolution='h')

lon = np.linspace(min(x), max(x))
lat = np.linspace(min(y), max(y))

xs, ys = np.meshgrid(lon, lat)
x, y = map(xs, ys)


map.drawparallels(np.arange(12.,14.,0.5), labels=[0,0,0,1])
map.drawmeridians(np.arange(123.,126.,0.5), labels=[1,0,0,0])

#Plot 
cmap = plt.cm.jet
cmap.set_bad(color='white')
m.pcolormesh(x, y, zz, cmap=cmap, vmax=1300, vmin=0) 
m.colorbar(location='right', label='meters')


map.drawmapboundary()
map.drawcoastlines()

первая часть сообщения об ошибке говорит:

ValueError                                Traceback (most recent call last)
    <ipython-input-50-3d7531011dc2> in <module>
         44 cmap = plt.cm.jet
         45 cmap.set_bad(color='white')
    ---> 46 m.pcolormesh(xs, ys, zz, cmap=cmap, vmax=1300, vmin=0)
         47 m.colorbar(location='right', label='meters')

затем, в конце,

ValueError: not enough values to unpack (expected 2, got 1)

Stackoverflow не позволяет мне опубликовать все сообщение об ошибке. Надеюсь, все, кто увидит мой пост, поймут, что я имею в виду.


person airparcel21050    schedule 12.09.2019    source источник
comment
вы должны вставить точное сообщение об ошибке в свой вопрос, а не просто перефразировать его. Сообщение об ошибке сообщит вам (и всем остальным) точный номер строки, в которой находится проблема. подсказка: может быть что-то, где у вас есть две вещи слева от знака равенства, но вещь справа — это только одна вещь, которую нельзя распаковать. Упаковка/распаковка Google Python. Как только вы определите номер строки, попробуйте добавить строку печати для вещи справа и посмотрите, что у вас получится.   -  person uhoh    schedule 12.09.2019
comment
Кроме того, для достижения наилучших результатов после публикации вопроса в идеале лучше оставаться в сети, потому что люди могут задавать вопросы довольно быстро, и если вы не ответите, ваш вопрос может быть отложен, поскольку неясно, что вы спрашиваете, и в этом случае нельзя публиковать ответы.   -  person uhoh    schedule 12.09.2019


Ответы (1)


Я думаю, что проблема в строке x, y = map(xs, ys). Посмотрите на этой странице документацию по функции Basemap() и пример использования (ищите по ключевому слову ".basemap"). В нем говорится, что пример использования:

# create Basemap instance for Robinson projection.
m = Basemap(projection='robin',lon_0=0.5*(lons[0]+lons[-1]))
# compute map projection coordinates for lat/lon grid.
x, y = m(*np.meshgrid(lons,lats))

Вы пытаетесь получить x,y из экземпляра Basemap(), который является только одним объектом. Вот почему он говорит, что ожидал 2 значения (x, y), но получил только одно (Basemap()).

person eerio    schedule 12.09.2019