Python 在底图中绘制包裹路径

Python 在底图中绘制包裹路径,python,plot,maps,matplotlib-basemap,Python,Plot,Maps,Matplotlib Basemap,我正试图绘制一条卫星地面轨道。我有一个以度为单位的纬度和经度列表。经度值都在-180到+180度之间。我的第一个问题是使用latlon关键字(顺便说一句,我在Julia中通过PyCall.jl包使用它,所以请原谅这种奇怪的语法): 这是。。。不是那种样子。我真的不确定问题出在哪里。但是,如果首先转换为地图坐标: xx,yy = map(lon,lat) map[:plot](xx,yy,color="red") 这更好,除了经度从+180到-180的点处的线。有什么建议可以让这个看起来更

我正试图绘制一条卫星地面轨道。我有一个以度为单位的纬度和经度列表。经度值都在-180到+180度之间。我的第一个问题是使用
latlon
关键字(顺便说一句,我在Julia中通过
PyCall.jl
包使用它,所以请原谅这种奇怪的语法):

这是。。。不是那种样子。我真的不确定问题出在哪里。但是,如果首先转换为地图坐标:

xx,yy = map(lon,lat) 
map[:plot](xx,yy,color="red")

这更好,除了经度从+180到-180的点处的线。有什么建议可以让这个看起来更好吗


可以找到用于生成这些图的纬度、经度对(以度为单位)。

开始时,我认为这可能与基础地图相关。然而,我认为您的问题并不是由于
基本地图
,它实际上正确地处理了经度环绕,您可以看到,如果您仅使用标记来绘制卫星地面轨迹

将numpy导入为np
将matplotlib.pyplot作为plt导入
从mpl_toolkits.basemap导入basemap
f=plt.图(figsize(10,7.5))
m=底图(投影=“磨坊”,长0=0)
m、 海岸线
m、 drawparallels(np.arange(-90,91,30),标签=[1,0,0,0])
m、 牵引子午线(np.arange(-180181,60),标签=[0,0,0,1])
x、 y=m(长、宽)
m、 绘图(x,y,color=“red”,latlon=False,marker=”,linestyle='None')

最终的解决方案是将地面轨迹分割为多个轨迹,并使用
LineCollection
进行绘制,如前所述。一种更简单的方法(如果您预期经度上有一个不连续):

将numpy导入为np
将matplotlib.pyplot作为plt导入
从mpl_toolkits.basemap导入basemap
latlon_ar=np.阵列(latlon)
阈值=90
idx_wrap=np.nonzero(np.abs(np.diff(latlon_ar[:,1]))>阈值)[0]+1
lon_1=lon[:idx_wrap]
lat_1=lat[:idx_wrap]
lon_2=lon[idx_wrap:]
lat_2=lat[idx_wrap:]
f=plt.图(figsize(10,7.5))
m=底图(投影=“磨坊”,长0=0)
m、 海岸线
m、 drawparallels(np.arange(-90,91,30),标签=[1,0,0,0])
m、 牵引子午线(np.arange(-180181,60),标签=[0,0,0,1])
x1,y1=m(长1,宽1)
x2,y2=m(长2,宽2)
m、 绘图(x1,y1,color=“red”,latlon=False)
m、 绘图(x2,y2,color=“蓝色”,latlon=False)

Edit这在
Basemap
中负责问题的第一个示例中的行为,其中
Basemap.plot
直接使用纬度和经度值调用,并将
latlon
标志设置为
True
。有一种方法,即在打印前手动移动输入坐标,如以下代码所示

lons,lats=m.shiftdata(lon,lat)
m、 绘图(lons,lats,color=“blue”,latlon=True,marker='.',linestyle='None')

简单地重新排列从地图边缘开始和结束的lat long列表是否可行?换句话说,根据经度从-180到180重新排序。我尝试重新排序,但由于太平洋上的重叠,路径在上半部分和下半部分之间来回反弹。这样的解决方案可能会有所帮助:我的印象是basemap是用来在内部处理类似的事情的,所以我希望避免使用国产的解决方案。你能把你的lat-lon数据发布到某个地方,这样人们就可以把它弄得乱七八糟,试着想出一个解决方案吗?这很好,谢谢。你知道我的第一个例子(使用
latlon=true
)中发生了什么吗?@Chris这是一个
底图。我已经更新了答案,并参考了错误和可能的解决方案。
xx,yy = map(lon,lat) 
map[:plot](xx,yy,color="red")