TypeError:在cartopy中使用时字符串索引必须是整数,但正常打印工作正常

Posted

技术标签:

【中文标题】TypeError:在cartopy中使用时字符串索引必须是整数,但正常打印工作正常【英文标题】:TypeError: string indices must be integers when using in cartopy but normal printing works fine 【发布时间】:2020-08-09 09:52:31 【问题描述】:

我正在尝试使用 cartopy 创建飞行路线图。我必须在地图上添加目的地名称并使用此代码来实现它:

origin_lat = 59.41329956
origin_lon= 24.83279991    
data = pd.read_csv("merged.csv", skiprows=[1])

这个 csv 文件有几列,其中一列称为 IATA,我试图从中提取这些位置字符串。

for i in range(len(data)):
lon = data['Longitude'][i]
lat =  data['Latitude'][i]
label = data['IATA'][i]

plt.plot([origin_lon, lon], [origin_lat, lat],
     color='red', linewidth=1,
     transform=ccrs.Geodetic(),
     )

print(label) # when i use only print it shows all the strings available in IATA column
plt.text(lon, lat, label[i],
     horizontalalignment='right',
     transform=ccrs.Geodetic())

但是当我在地图中绘制时,它会显示错误

[36 行 x 15 列]

AMS
ATH
TXL
BRU
Traceback (most recent call last):

  File "D:\spyderPython\hw3\readCSV.py", line 65, in <module>
    plt.text(lon, lat, label[i],

IndexError: string index out of range

有人可以告诉我我做错了什么吗?

【问题讨论】:

你能修复for循环中的缩进吗?比如for里面的print是? 当你print(label)时,你会得到什么?如果它只是一个像“AMS”这样的字符串,那么label[i] 不是你想要的。我认为plt.text(lon, lat, label, ...) 解决了这个问题。 【参考方案1】:

您正在尝试在这里再次获取标签:

plt.text(lon, lat, label[i],
     horizontalalignment='right',
     transform=ccrs.Geodetic())

我假设您的label 已经是一个字符串,并且range(len(data)) 大于您的label 的长度。这就是你得到一个 IndexError 的原因,只需使用以下代码切换该代码:

plt.text(lon, lat, label,
     horizontalalignment='right',
     transform=ccrs.Geodetic())

【讨论】:

以上是关于TypeError:在cartopy中使用时字符串索引必须是整数,但正常打印工作正常的主要内容,如果未能解决你的问题,请参考以下文章

与 cartopy 一起使用时,上下颠倒映射

Python 3.4在生成一些 - 但不是全部 - 具有分段错误11的Cartopy地图时崩溃

相对于地理轴(cartopy)正确放置颜色条

在 Python3 MacOS 上安装 Cartopy 的问题

我无法使用 conda 将 cartopy 升级到 0.18.0

无法使用 conda 安装 cartopy 0.17