これはold issueのBasemap
に関連する可能性があると私は考えました。しかし、私はあなたの問題はBasemap
であると考えています。実際には正確に経度の折り返しを処理しています。マーカーだけを使って衛星の地面をプロットすると分かります。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
f = plt.figure(figsize(10,7.5))
m = Basemap(projection="mill", lon_0=0)
m.drawcoastlines()
m.drawparallels(np.arange(-90,91,30),labels=[1,0,0,0])
m.drawmeridians(np.arange(-180,181,60), labels=[0,0,0,1])
x,y = m(lon, lat)
m.plot(x, y, color="red", latlon=False, marker='.', linestyle='None')
![enter image description here](https://i.stack.imgur.com/SBPJA.png)
決定的な解決策は、複数のトラックであなたの地上トラックを分割してもhereを説明したように、LineCollection
を使用してそれらをプロットすることです。単純なアプローチ(あなたが経度で1つの不連続を期待している場合):
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
latlon_ar = np.array(latlon)
threshold = 90
idx_wrap = np.nonzero(np.abs(np.diff(latlon_ar[:,1])) > threshold)[0]+1
lon_1 = lon[:idx_wrap]
lat_1 = lat[:idx_wrap]
lon_2 = lon[idx_wrap:]
lat_2 = lat[idx_wrap:]
f = plt.figure(figsize(10,7.5))
m = Basemap(projection="mill", lon_0=0)
m.drawcoastlines()
m.drawparallels(np.arange(-90,91,30),labels=[1,0,0,0])
m.drawmeridians(np.arange(-180,181,60), labels=[0,0,0,1])
x1, y1 = m(lon_1, lat_1)
x2, y2 = m(lon_2, lat_2)
m.plot(x1, y1, color="red", latlon=False)
m.plot(x2, y2, color="blue", latlon=False)
![enter image description here](https://i.stack.imgur.com/4cN0Y.png)
編集このconfirmed bugBasemap
ではBasemap.plot
が呼び出された質問の最初の例で行動する責任がありますlatlon
フラグをTrue
に設定して、緯度と経度の値を直接入力します。 solutionがあります。これは、次のコードのように、プロットする前に入力座標を手動でシフトすることです。
lons, lats = m.shiftdata(lon, lat)
m.plot(lons, lats, color="blue", latlon=True, marker='.', linestyle='None')
![enter image description here](https://i.stack.imgur.com/WaNQm.png)
単にLAT-long値のリストを再発注を開始し、マップの端で終了するために、任意のチャンスが働くだろうか?言い換えれば、-180から180までの経度に基づいて並べ替えます。 – dagrha
並べ替えを試みましたが、太平洋上のオーバーラップのために、パスは上部と下部の間を行き来します。 – Chris
このような解決策が役立つかもしれません:http://stackoverflow.com/a/27139390/3651127 – dagrha