Код: Выделить всё
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import matplotlib.pyplot as plot
import pandas as pd
MAP_FIXED_WIDTH = 8
MAP_FIXED_HEIGHT = 6
df = pd.DataFrame(
{
"timestamp":
[
pd.Timestamp('2025-01-01 00:00:00 UTC'),
pd.Timestamp('2025-01-01 00:30:00 UTC'),
pd.Timestamp('2025-01-01 01:00:00 UTC'),
pd.Timestamp('2025-01-01 01:30:00 UTC'),
pd.Timestamp('2025-01-01 02:00:00 UTC'),
],
"latitude": [20,22,24,26,28],
"longitude": [-45,-40,-35,-30,-25],
},
)
def create_map_with_scatter_points(df: pd.DataFrame) -> None:
plot.figure(figsize=(MAP_FIXED_WIDTH, MAP_FIXED_HEIGHT))
axes = plot.axes(
projection=ccrs.PlateCarree(central_longitude=df["longitude"].median())
)
axes.set_box_aspect(MAP_FIXED_HEIGHT / MAP_FIXED_WIDTH)
axes.scatter(df["longitude"], df["latitude"], color='green')
axes.set_facecolor(cfeature.COLORS["water"])
axes.add_feature(cfeature.LAND, color="lightgray")
axes.add_feature(cfeature.LAKES)
axes.add_feature(cfeature.RIVERS)
axes.add_feature(cfeature.COASTLINE)
axes.add_feature(cfeature.BORDERS, linestyle=":")
axes.gridlines(
draw_labels=True, linewidth=1, color="gray", alpha=0.5, linestyle="--"
)
plot.show()
create_map_with_scatter_points(df)
Код: Выделить всё
matplotlib==3.10.7Код: Выделить всё
pandas==2.3.3Код: Выделить всё
cartopy==0.25.0
К сожалению, используя axes.set_aspect(aspect='equal', регулируемый='datalim') также возвращает тот же результат, поскольку set_adjustable игнорирует явные ограничения данных.
В идеале мне бы хотелось избежать необходимости вручную создавать логику для обеспечения соотношения сторон поля через axes.set_extent, особенно из-за того, насколько сложно может быть обеспечить правильное использование правильной центральной долготы для карт, где данные пересекают 180-й меридиан и долгота переключаются между +/- 180.
Кто-нибудь еще сталкивался с этой проблемой при создании карт с помощью matplotlib и cartopy, и есть ли какие-либо обходные пути, которые вы нашли?
Подробнее здесь: https://stackoverflow.com/questions/798 ... xes-box-as
Мобильная версия