在有周期边界且无线段的情况下绘制漂亮的曲线

4
使用库pyephem,我想找到一种方法来做出一个漂亮的图表(经度,纬度)曲线,表示卫星的地面轨迹。我已经计算出了(经度,纬度),但当经度超过+180°时,下一个计算出的值为-178°,这样就会绘制一个线段,使图形变得不好看。
以下是我目前拥有的代码和得到的图形。
currentDate = date.datetime(2018,12,1,0,0,0);

for i in range(nPoints):
  iss.compute(currentDate)
  # compute latitude
  posLat[i] = iss.sublat*(180/math.pi)
  # compute longitude
  posLong[i] = iss.sublong*(180/math.pi)
  currentDate = currentDate + date.timedelta(seconds = (time3orbits/nPoints*3600))                
  print currentDate, posLong[i], posLat[i]

plt.plot(posLong,posLat)
plt.show()

这是我得到的数字(绕地球3次):

enter image description here

如何防止绘制线段? iss.sublatiss.sublong 分别是国际空间站当前位置的纬度和经度(以固定的 currentDate 为基准)。

什么是iss和iss.sublat? - sam46
也许您想在绘制前按纬度对(lat,long)点进行排序? - sam46
@BanishedBot。是的,但如何处理经度从177°到-178°的情况,而不在两个点之间绘制线段?您可以在更新2中查看输出数据。问候 - user1773603
plot() 默认按顺序通过线连接连续的点。也许你应该使用 scatter()?不确定你的目标是什么或者你想让图像看起来像什么。 - sam46
1个回答

0

你可以根据正负号变化将数据数组分割成单个子数组,然后绘制它们:

orbits = np.argwhere(
    (data[:-1, 0] * data[1:, 0] < 0)
    & (data[1:, 0] < 0)
).ravel() + 1

for orbit in np.split(data, orbits, axis=0):
    plt.plot(orbit[:, 0], orbit[:, 1])

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接