Как добавить реальную карту в качестве фона к графику

#python #geopandas

#python #геопанды

Вопрос:

Я пытаюсь добавить реальную карту позади моего графика, чтобы показать расположение моих точек данных.

Но я не знаю, как добавить настоящую карту…

Я пробовал несколько способов, например, поместить другой png за сюжет.

Но это просто неправильно.

Вот что у меня получилось.

 import geopandas as gpd
import tilemapbase

BBox = (df.Longitude.min(), df.Longitude.max(), df.Latitude.min(), df.Latitude.max())
print(BBox)
(3.3990449, 7.042425700000001, 50.8134557, 53.4066264)

tilemapbase.start_logging()
tilemapbase.init(create=True)
extent = tilemapbase.extent_from_frame(NL_shape, buffer = 25)

fig, ax = plt.subplots(figsize=(10,10))
plotter = tilemapbase.Plotter(extent, tilemapbase.tiles.build_OSM(), width=1000)
plotter.plot(ax)
ax.set_xlim(BBox[0]-0.2, BBox[1] 0.2)
ax.set_ylim(BBox[2]-0.5, BBox[3] 0.5)
NL_shape.plot(ax=ax, alpha=0.3, edgecolor="black", facecolor="white")
stores_shape.plot(ax=ax, alpha = 0.2, color="red", marker='o');
 

Я следовал инструкциям отсюда: https://rosenfelder.ai/create-maps-with-python /

Я использовал геопанды, чтобы прочитать границу страны (json), а затем нанести свои данные на график.

Но я не могу использовать tilemapbase для загрузки realmap.

Результат получается примерно такой:

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

Кто-нибудь знает, как исправить эту проблему? Спасибо.

Ожидаемый образ выглядит следующим образом. Базовая карта должна быть похожа на OpenStreetMap.

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

После того, как я использовал КОНТЕКСТНО, у меня возникла ошибка.

Это выглядело так:

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

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

Комментарии:

1. Можете ли вы показать ожидаемое изображение?

2. Хорошо, я добавил ее.

Ответ №1:

Используйте contextily библиотеку, созданную для геопанд. — https://contextily.readthedocs.io/en/latest /

 import contextily as cx

fig, ax = plt.subplots(figsize=(10,10))
NL_shape.plot(ax=ax, alpha=0.3, edgecolor="black", facecolor="white")
stores_shape.plot(ax=ax, alpha = 0.2, color="red", marker='o');
cx.add_basemap(ax, crs=NL_shape.crs, source=cx.providers.OpenStreetMap.Mapnik)
 

Комментарии:

1. Я верю, что это работает! Но у меня есть проблема в моей среде разработки. Я не могу загрузить пакет contextily…

2. Среда решения: сбой при первоначальном замороженном решении. Повторная попытка с гибким решением. Ошибка PackagesNotFoundError: следующие пакеты недоступны из текущих каналов: — контекстно

3. Среда решения: / Предупреждение: 2 возможных разрешения пакетов (только для отображения разных пакетов): — anaconda/osx-64 ::openssl-1.1.1h-haf1e3a3_0 — defaults/osx-64 ::openssl-1.1.1h-haf1e3a3done

4. conda config --env --add channels conda-forge и conda install contextily -c conda-forge может помочь.

5. ОК. Теперь я нашел способ преодолеть проблему и установить контекст. Но есть ошибка: AttributeError: объект ‘AxesImage’ не имеет свойства ‘source’