Python 向geopandas绘图添加底图

Python 向geopandas绘图添加底图,python,geopandas,Python,Geopandas,我有一个geojson文件,它由覆盖着六边形多边形的纽约市组成,我将其读入geopandas数据框。我希望将雄蕊TonerLite底图添加到数据帧的绘图中。但是,我无法复制与此处工作示例相同的结果- 我在下面给出了相关数据帧的代码和crs的一个小示例: %matplotlib inline import matplotlib import matplotlib.pyplot as plt import geopandas as gpd import contextily as ctx fp

我有一个geojson文件,它由覆盖着六边形多边形的纽约市组成,我将其读入geopandas数据框。我希望将雄蕊TonerLite底图添加到数据帧的绘图中。但是,我无法复制与此处工作示例相同的结果-

我在下面给出了相关数据帧的代码和crs的一个小示例:

%matplotlib inline

import matplotlib
import matplotlib.pyplot as plt
import geopandas as gpd
import contextily as ctx

fp = "/data/hex_bins/nyc_hex_bins.geojson"
map_df = gpd.read_file(fp)
map_df = map_df.to_crs(epsg=3857)

ax = map_df.plot(figsize=(10, 10), alpha=0.5, edgecolor='k')
ctx.add_basemap(ax, zoom=12, source=ctx.providers.Stamen.TonerLite)
ax.set_axis_off()
我得到了一个没有地图背景的空白背景,但只有纽约市形状的六边形

我绘制的数据帧的crs是

<Projected CRS: EPSG:3857>
Name: WGS 84 / Pseudo-Mercator
Axis Info [cartesian]:
- X[east]: Easting (metre)
- Y[north]: Northing (metre)
Area of Use:
- name: World - 85°S to 85°N
- bounds: (-180.0, -85.06, 180.0, 85.06)
Coordinate Operation:
- name: Popular Visualisation Pseudo-Mercator
- method: Popular Visualisation Pseudo Mercator
Datum: World Geodetic System 1984
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich

名称:WGS 84/伪墨卡托
轴信息[笛卡尔坐标]:
-X[东]:东距(米)
-Y[北]:北距(米)
使用范围:
-名称:世界-85°S至85°N
-界限:(-180.0,-85.06,180.0,85.06)
协调操作:
-名称:流行可视化伪墨卡托
-方法:流行的可视化伪墨卡托
基准:1984年世界大地测量系统
-椭球体:WGS 84
-本初子午线:格林威治
crs与我从上面链接的示例中得到的完全相同(该示例适用于我)


我如何找出问题所在?多年来,我使用folium或ipyleaflet在许多绘图中使用了这个geojson文件,我不怀疑它有任何问题。但这里有一个指向文件的链接-

您的文件已损坏。GeoJSON加载了CRS 3857,而几何体本身在4326中。只需在重新投影到Web Mercator之前分配正确的CRS即可

map_df = gpd.read_file(fp)
map_df.crs = 4326  # this line
map_df = map_df.to_crs(epsg=3857)

ax = map_df.plot(figsize=(10, 10), alpha=0.5, edgecolor='k')
ctx.add_basemap(ax, zoom=12, source=ctx.providers.Stamen.TonerLite)
ax.set_axis_off()
请注意,您的六边形没有在正确的投影CR中生成,因此它们是倾斜的