You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将经纬度嵌套列表转为实数,解决散点图TypeError问题

解决经纬度嵌套列表转实数及散点图绘制报错问题

问题说明

我有纬度列表xx和经度列表yy,其中xx是嵌套列表格式:

print(xx)
[['46.0'], ['-69.7'], ['-50.7'], ['-22.3'], ['-36.7'], ['65.1'], ['-26.3'], ['-47.5'], ['19.4'], ['-82.3'], ['50.8'], ['-63.5'], ['34.2'], ['65.1']]

xx的类型为list,且每个子元素也是list:

type(xx)
list
type(xx[0])
list

尝试绘制散点图时触发以下错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-124-bc1e6bece6b3> in <module>
     15 m.drawmapboundary(fill_color='aqua')
     16 plt.title("distribution of the observation")
---> 17 x, y = map(yy, xx)
     18 map.scatter(x, y, marker='D',color='m')
     19 plt.show()

TypeError: 'list' object is not callable

需要将嵌套列表转换为实数,解决报错并完成散点图绘制。


解决方案

1. 错误根源

  • 你把变量名map和Python内置函数map()重名了,导致调用坐标转换时实际调用的是列表对象,触发'list' object is not callable错误。
  • xx和yy是嵌套的字符串列表,无法直接用于绘图计算,需要先转换为浮点型数值。

2. 嵌套列表转实数

用列表推导式提取嵌套元素并转换为浮点数:

# 处理纬度xx:提取子列表中的字符串并转浮点数
xx_float = [float(item[0]) for item in xx]
# 同理处理经度yy(假设yy为相同嵌套格式)
yy_float = [float(item[0]) for item in yy]

3. 修正绘图代码

避免变量名与内置函数冲突,同时使用转换后的数值绘图(以Basemap库为例):

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

# 初始化地图对象(注意变量名用m,不要用map)
m = Basemap(projection='cyl', llcrnrlat=-90, urcrnrlat=90, llcrnrlon=-180, urcrnrlon=180, resolution='c')
m.drawcoastlines()
m.drawmapboundary(fill_color='aqua')
plt.title("distribution of the observation")

# 转换经纬度为地图坐标(Basemap的转换函数参数是:经度在前,纬度在后)
x, y = m(yy_float, xx_float)
# 绘制散点图
m.scatter(x, y, marker='D', color='m')

plt.show()

关键注意点

  • 永远不要用内置函数名(如map、list、str)作为自定义变量名,避免覆盖内置功能。
  • 嵌套列表必须先提取内部的字符串元素,再转换为数值类型才能用于绘图计算。
  • Basemap的坐标转换函数参数顺序是经度在前,纬度在后,不要搞反。

内容的提问来源于stack exchange,提问作者bah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 18:50:26