Как построить линии между несколькими точками x, y в matplotlib / basemap - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь построить количество линий между двумя разными точками X и Y в matplotlib, используя базовую карту.

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), но не может построить вторую точку и соединить ее с линией.

Буду очень признателен за любые предложения! Спасибо.

1 Ответ

0 голосов
/ 02 февраля 2019

Я бы предложил использовать LineCollection здесь из-за строк "100+".Конечно, сначала вам нужно спроецировать координаты в системе базовой карты.Затем вы можете снова сложить их в простой массив и создать массив сегментов для LineCollection.

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()

enter image description here

...