Как добавить точечную диаграмму на карту Лондона с помощью python

Я пытаюсь нарисовать этот разброс по карте Лондона, но это не правильно, вот мой код, карты имеют разные размеры, и я хочу одну карту, а у меня 2. Это мой фрейм данных (dfrt), чтобы получить разброс :

commonName  id  lat lon placeType   url additionalProperties2   category    key sourceSystemKey value   modified
0   River Street , Clerkenwell  BikePoints_1    51.529163   -0.109970   BikePoint   /Place/BikePoints_1 {'$type': 'Tfl.Api.Presentation.Entities.Addit...   Description TerminalName    BikePoints  001023  2019-08-22T11:17:04.327Z
1   Phillimore Gardens, Kensington  BikePoints_2    51.499606   -0.197574   BikePoint   /Place/BikePoints_2 {'$type': 'Tfl.Api.Presentation.Entities.Addit...   Description TerminalName    BikePoints  001018  2019-08-22T11:10:02.34Z
2   Christopher Street, Liverpool Street    BikePoints_3    51.521283   -0.084605   BikePoint   /Place/BikePoints_3 {'$type': 'Tfl.Api.Presentation.Entities.Addit...   Description TerminalName    BikePoints  001012  2019-08-22T11:12:02.7Z
3   St. Chad's Street, King's Cross BikePoints_4    51.530059   -0.120973   BikePoint   /Place/BikePoints_4 {'$type': 'Tfl.Api.Presentation.Entities.Addit...   Description TerminalName    BikePoints  001013  2019-08-22T11:08:02.047Z
4   Sedding Street, Sloane Square   BikePoints_5    51.493130   -0.156876   BikePoint   /Place/BikePoints_5 {'$type': 'Tfl.Api.Presentation.Entities.Addit...   Description TerminalName

И это то, что я пытался получить сюжеты:

fig = plt.figure(figsize=(20, 10))
m = Basemap(projection='lcc', resolution='h',
lat_0=51.53, lon_0=0.08,
width=1E6, height=1.2E6)
m.shadedrelief()
m.drawcoastlines(color='gray')
m.drawcountries(color='gray')


a4_dims = (20, 10)
fig, ax = plt.subplots(figsize = a4_dims)

ax.scatter(dfrt['lat'], dfrt['lon'])

ax.set_title('Latitud y Longitud de la ubicación de BikePoints')
ax.set_xlabel('Latitud')
ax.set_ylabel('Longitud')

Не могли бы вы мне помочь?


person Alexa    schedule 21.08.2019    source источник


Ответы (1)


Вы дважды создаете фигуру/оси и в конечном итоге строите 2 фигуры. Вот соответствующий код, основанный на вашем:

# create figure and axes
fig = plt.figure(figsize=(20, 10))
ax1 = plt.gca()
m = Basemap(projection='lcc', resolution='h', \
    lat_0=51.53, lon_0=0.08,
    width=1E6, height=1.2E6, ax=ax1)
m.shadedrelief()
m.drawcoastlines(color='gray')
m.drawcountries(color='gray')

# a4_dims = (20, 10)
# fig, ax = plt.subplots(figsize = a4_dims)

# uncomment to do scatter plot
#ax1.scatter(dfrt['lat'], dfrt['lon'])

ax1.set_title('Latitud y Longitud de la ubicación de BikePoints')
ax1.set_xlabel('Latitud')
ax1.set_ylabel('Longitud')

plt.show()

и (незаконченный) сюжет:

введите здесь описание изображения

Изменить 1

Для графика данных на карте вот код, который использует простые данные для построения графика:

# sample data
lons = np.array([-5.371475, -1.569707, -0.892185])
lats = np.array([51.211262, 52.819886, 55.122479])
x,y = m(lons, lats)

# any of these code will plot dots on the map
#ax1.plot(*m(lons, lats), 'ro')  # OK
#ax1.plot(x, y, 'ro')            # OK
ax1.scatter(x, y, 25)            # OK

Для данных из кадра данных pandas попробуйте получить lons и lats следующим образом:

lons = list(dfrt['lon'])
lats = list(dfrt['lat'])

затем сделайте, как показано выше.

person swatchai    schedule 22.08.2019
comment
Привет @ swatchai, это не работает :( Я не вижу разброс после раскомментирования. Не могли бы вы мне помочь? - person Alexa; 22.08.2019
comment
@Alexa Тогда ваши координаты данных, вероятно, указаны в (долгота, широта) в градусах. Возможно, вам придется сначала преобразовать их в координаты проекции. Попробуйте ax1.scatter(*m(dfrt['lon'], dfrt['lat'], 'or')). - person swatchai; 22.08.2019
comment
@ swatchai Теперь я получил эту ошибку: TypeError: input должен быть массивом, списком, кортежем или скаляром. - person Alexa; 22.08.2019
comment
@Alexa Проблема с вашими данными. Попробуйте поделиться. Нужны только некоторые из них, представляющие целое. - person swatchai; 22.08.2019
comment
@ swatchai спасибо за вашу помощь. Я делюсь образцом своих данных в своем обновленном вопросе. Это нормально? - person Alexa; 22.08.2019
comment
Кстати, другой подход использует ax1.plot(*m(dfrt['lon'], dfrt['lat'], 'or')). - person swatchai; 22.08.2019
comment
@ swatchai: На этот раз я получил эту ошибку: if sys.path[0] == '' - person Alexa; 22.08.2019