【问题标题】:Python,IndexError: arrays used as indices must be of integer (or boolean) typePython,IndexError:用作索引的数组必须是整数(或布尔)类型
【发布时间】:2020-06-11 16:30:39
【问题描述】:

我得到一个 IndexError:用作索引的数组在 pcolormesh 的行中必须是整数(或布尔)类型,知道如何处理这个问题。

脚本:

import numpy as np 
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

data = np.loadtxt('out (copie).txt')
lats = data[:,0]
lons = data[:,1]
codg_tec = data[:,2]

m = Basemap(projection = 'merc', llcrnrlon= -9, llcrnrlat=19, urcrnrlon= 12, urcrnrlat= 37,  resolution= 'i')
m.drawcoastlines()

lon, lat = np.meshgrid(lons, lats)
x, y = m(lon, lat)

cb = m.pcolormesh(x, y, np.squeeze(data[codg_tec]) , shading='flat', cmap=plt.cm.jet)
cbar = m.colorbar(cb, location = 'right', pad = '10%')

m.drawmapboundary()
m.drawmapscale()
m.drawmeridians(np.arange(-9,12,5), labels=[False,False,False,True])
m.drawparallels(np.arange(19,38,5), labels=[True,False,False,False])
m.drawstates()
m.drawcountries()

plt.title('CODG-vTEC on 02-01-2015')
plt.show() 

错误:

Traceback (most recent call last):
 File "color.py", line 21, in <module>
  cb = m.pcolor(x, y, data[codg_tec] , shading='flat', cmap=plt.cm.jet)
IndexError: arrays used as indices must be of integer (or boolean) type

【问题讨论】:

  • 错误行不在您的代码中。大概是data[codg_tec] 的错误。您可以将其从调用中移出以进行验证,但也可以打印一些内容以查看 codg_tec 是什么。例如,如果它是一个字符串数组,您会收到此错误。我们需要样本数据来解决这个问题。
  • 您可能正在使用 Series 来索引数组,而 Series 可能不是整数数据类型。没有示例数据,我们无法回答这个问题。我认为在发布信息之前,我们应该将其关闭,因为“需要更多详细信息”。

标签: python matplotlib-basemap


【解决方案1】:

只需将float数组转换为int数组即可解决问题:

lats = data[:,0].astype(int)
lons = data[:,1].astype(int)
codg_tec = data[:,2].astype(int)

【讨论】:

  • 但是如果不想转成int数组怎么办?
猜你喜欢
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-13
  • 1970-01-01
相关资源
最近更新 更多