[英]How to plot lines between multiple x,y points in matplotlib/basemap
我正在嘗試使用底圖在matplotlib中的2個不同的X和Y點之間繪制多條線。
import matplotlib.pyplot as plt
import numpy as np
Map=pd.read_excel(r'file.xlsx')
lat=Map['Start Latitude']
long=Map['Start Longitude']
lat1=Map['Fin Latitude']
long2=Map['Fin Longitude']
x,y=m(lon.values,lat.values)
plt=m.scatter(x,y, marker="o", latlon=False)
例如:
Line1 would be between 1x,1y and 1x1,1y1
Line3 would be between 2x,2y and 2x1,2y1
Line3 would be between 3x,3y and 3x1,3y1
etc
其中“ x”,“ y”,“ x1”和“ y1”位於單獨的列中(“起始緯度”,“起始經度”,“最終緯度”,“最終經度”)。
會有100多個不同的行
我可以在上面繪制“起始緯度”和“起始經度”(使用x,y=m(lon.values,lat.values)
和plt=m.scatter(x,y, marker="o", latlon=False)
,但無法繪制第二個點並在其上連接一條線。
任何建議將不勝感激! 謝謝。
由於“ 100+”行,我建議在這里使用LineCollection
。 當然,您首先需要在底圖系統中投影坐標。 然后,您可以將它們再次堆疊到numpy數組中,並為LineCollection
創建segment數組。
import numpy as np; np.random.seed(42)
import pandas as pd
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
df = pd.DataFrame({"lon1" : np.random.randint(-15,30,10),
"lat1" : np.random.randint(33,66,10),
"lon2" : np.random.randint(-15,30,10),
"lat2" : np.random.randint(33,66,10)})
m = Basemap(llcrnrlon=-12,llcrnrlat=30,urcrnrlon=50,urcrnrlat=69.,
resolution='i', projection='tmerc', lat_0 = 48.9, lon_0 = 15.3)
m.drawcoastlines(linewidth=0.72, color='gray')
m.drawcountries(zorder=0, color='gray')
lon1, lat1 = m(df.lon1.values, df.lat1.values)
lon2, lat2 = m(df.lon2.values, df.lat2.values)
pts = np.c_[lon1, lat1, lon2, lat2].reshape(len(lon1), 2, 2)
plt.gca().add_collection(LineCollection(pts, color="crimson", label="Lines"))
m.plot(lon1, lat1, marker="o", ls="", label="Start")
m.plot(lon2, lat2, marker="o", ls="", label="Fin")
plt.legend()
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.