地理图不显示 x、y 轴 python
Geoplot not displaying x,y axis python
我正在尝试使用 geoplot 绘制旧金山县犯罪分布的热图。问题是当我使用 geoplot 的数据集绘制 SF 的地图时,x,y 轴没有出现。我在我的最终演示中使用了这张地图,所以我认为如果为观众显示坐标轴(经度和纬度作为坐标轴),它会更易读。我搜索了尽可能多的文档,并尝试使用 ax.axis('on') 但没有用。如果有任何建议,我将不胜感激。谢谢
(顺便说一句,我在 jupyter 上这样做)
df 是我使用的数据框,其中包含 500k 犯罪记录,位置包含经度和纬度。
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)
Geoplot 建立在 cartopy 之上,返回的轴对象看起来确实是普通的 cartopy GeoAxis
对象,因此您应该能够使用该库中可用的任何图形自定义。默认情况下,cartopy 图不包括轴 ticks/ticklabels,因为该库经常用于在投影中绘图,其中 x 和 y 值不对应于 lat/lon。
要在 cartopy 中添加网格线,请使用 ax.gridlines
。这些将正确处理您的投影并在您的地图上绘制 lat/lon 线作为等高线。
来自 adding map gridlines and tick labels 上的文档:
ax.gridlines(draw_labels=True, dms=True, x_inline=False, y_inline=False)
关于网格线和自定义它们的方法有很多争论,但希望这能让您入门。
另一种可用的更多几何图形的方法是 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})
我正在尝试使用 geoplot 绘制旧金山县犯罪分布的热图。问题是当我使用 geoplot 的数据集绘制 SF 的地图时,x,y 轴没有出现。我在我的最终演示中使用了这张地图,所以我认为如果为观众显示坐标轴(经度和纬度作为坐标轴),它会更易读。我搜索了尽可能多的文档,并尝试使用 ax.axis('on') 但没有用。如果有任何建议,我将不胜感激。谢谢 (顺便说一句,我在 jupyter 上这样做) df 是我使用的数据框,其中包含 500k 犯罪记录,位置包含经度和纬度。
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)
Geoplot 建立在 cartopy 之上,返回的轴对象看起来确实是普通的 cartopy GeoAxis
对象,因此您应该能够使用该库中可用的任何图形自定义。默认情况下,cartopy 图不包括轴 ticks/ticklabels,因为该库经常用于在投影中绘图,其中 x 和 y 值不对应于 lat/lon。
要在 cartopy 中添加网格线,请使用 ax.gridlines
。这些将正确处理您的投影并在您的地图上绘制 lat/lon 线作为等高线。
来自 adding map gridlines and tick labels 上的文档:
ax.gridlines(draw_labels=True, dms=True, x_inline=False, y_inline=False)
关于网格线和自定义它们的方法有很多争论,但希望这能让您入门。
另一种可用的更多几何图形的方法是 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})