Python Basemap折线绘制问题:远程坐标列表无法绘图
Troubleshooting Basemap Line Plot Issues
嘿,我来帮你搞定这个Basemap画折线的问题~结合你给出的坐标数据,我整理了几个最可能的原因和解决步骤:
1. 先确认坐标列表完整且长度匹配
你贴的第二个纬度列表([51.2, 52.8, ..., 7...)明显是截断了的,Basemap的plot方法要求经度和纬度列表的元素数量必须完全一致,不然要么报错,要么根本画不出线。先把缺失的纬度数据补全,确保两个列表长度一样。
2. 别忘了转换地理坐标到投影坐标
Basemap是基于投影坐标系工作的,直接用原始经纬度调用plot肯定不行——你得先通过Basemap实例把经纬度转换成它能识别的投影坐标。给你个完整的示例代码:
from mpl_toolkits.basemap import Basemap import matplotlib.pyplot as plt # 初始化Basemap,这里用墨卡托投影,范围适配你的坐标(lon15-33,lat50-75) m = Basemap(projection='merc', llcrnrlat=50, urcrnrlat=75, llcrnrlon=15, urcrnrlon=33, resolution='i') # 你的坐标列表(补全后的lat_list) lon_list = [15.2, 15.1, 15.4, 15.6, 15.5, 15.9, 16.0, 15.8, 15.3, 15.6, 16.0, 16.7, 16.1, 16.3, 17.2, 17.7, 19.0, 20.1, 21.3, 22.1, 23.1, 23.9, 24.2, 24.2, 25.2, 26.1, 26.4, 27.1, 27.5, 28.1, 28.7, 29.0, 29.2, 29.6, 30.0, 30.3, 30.9, 31.7, 32.7] lat_list = [51.2, 52.8, 53.9, 55.6, 57.3, 59.3, 61.2, 63.0, 64.0, 65.4, 67.1, 68.7, 70.0, 70.8, 71.9, 77.0, ...] # 把这里的省略号换成完整的纬度值 # 关键一步:转换经纬度到投影坐标 x, y = m(lon_list, lat_list) # 绘制折线 m.plot(x, y, linewidth=2, color='#ff4444', label='Track') # 加一些地图元素让结果更直观 m.drawcoastlines(linewidth=0.8) m.drawcountries(linewidth=0.5) plt.legend(loc='upper right') plt.title('Your Track on Map') plt.show()
3. 检查坐标顺序有没有搞反
Basemap的坐标转换方法m(lon, lat)要求第一个参数是经度,第二个是纬度。如果搞反了,折线要么跑到地图外面,要么显示得完全不对。你可以先打印转换后的x和y值,看看是不是在你设置的地图范围内。
4. 确认Basemap的范围覆盖所有坐标
如果你的坐标超出了初始化Basemap时设置的llcrnrlat、urcrnrlat、llcrnrlon、urcrnrlon范围,折线也会显示不出来。可以先把范围调大一点试试,比如把llcrnrlat设成45,urcrnrlat设成80,确保所有坐标都在地图里。
要是还解决不了,把你实际运行的代码和报错信息贴出来,我再帮你细化排查~
内容的提问来源于stack exchange,提问作者keithlatteri
相关产品推荐
相关产品推荐

