Геоплот не отображает python по оси x, y

#python #seaborn #geopandas #kernel-density #geoplot

#python #seaborn #геопанды #плотность ядра #геоплот

Вопрос:

Я пытаюсь использовать geoplot для построения тепловой карты распределения преступности в округе Сан-Франциско. Проблема в том, что когда я использовал набор данных из geoplot для рисования карты SF, оси x, y не отображаются. Я использую эту карту для своей финальной презентации, поэтому решил, что она будет более удобочитаемой для моей аудитории, если для нее будут отображаться оси (долгота и широта в качестве осей). Я искал столько документов, сколько мог, и пытался использовать ax.axis (‘on’), но не сработало. Я был бы очень признателен за любые советы. Спасибо (кстати, я делаю это на jupyter) df — это фрейм данных, который я использовал, который содержал 500 тыс. записей о преступлениях с местоположениями, содержащими долготу и широту.

 gdf1 = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy(df.Longitude, df.Latitude))
sf = gpd.read_file(gplt.datasets.get_path("san_francisco"))
count = gdf1
ax = gplt.polyplot(sf, projection=gcrs.AlbersEqualArea(),figsize=(10,10))
gplt.kdeplot(count, cmap="Reds", shade=True, clip=sf, ax=ax, cbar=True)
 

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

Ответ №1:

Geoplot построен поверх cartopy, и возвращаемые объекты axis кажутся обычными GeoAxis объектами cartopy, поэтому вы должны иметь возможность использовать любые настройки фигуры, доступные в этой библиотеке. По умолчанию картографические графики не включают метки / метки оси, поскольку библиотека часто используется для построения в проекции, где значения x и y не соответствуют широте / широте.

Чтобы добавить линии сетки в картографию, используйте ax.gridlines . Они будут корректно обрабатывать вашу проекцию и рисовать линии широты / долготы в виде контуров на вашей карте.

Из документации по добавлению линий сетки карты и меток:

 ax.gridlines(draw_labels=True, dms=True, x_inline=False, y_inline=False)
 

Существует множество аргументов для линий сетки и способов их настройки, но, надеюсь, это поможет вам начать.

Ответ №2:

Альтернативный подход, при котором доступно больше геометрии, — это график плотности mapbox. Дополнительные слои могут быть добавлены, если требуется сетка.

 import requests
import pandas as pd
import plotly.express as px

df = pd.json_normalize(
    requests.get("https://data.sfgov.org/resource/wg3w-h783.json").json()
)

px.density_mapbox(
    df,
    lat="latitude",
    lon="longitude",
    radius=10,
    color_continuous_scale="reds",
    center=dict(
        lat=df["latitude"].astype(float).mean(),
        lon=df["longitude"].astype(float).mean(),
    ),
    zoom=10,
    mapbox_style="carto-positron",
).update_layout(margin={"t":0,"b":0,"l":300,"r":300})
 

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