将经纬度嵌套列表转为实数,解决散点图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
相关产品推荐
相关产品推荐

