当前位置: 首页 > 知识库问答 >
问题:

向geopandas绘图添加底图

阎阳
2023-03-14

我有一个gejson文件,它由覆盖着六边形多边形的纽约市组成,我把它读进了geopandas数据框。我希望在数据框的图中添加Stmen TonerLite底图。但是,我无法复制与这里的工作示例相同的结果-https://geopandas.org/gallery/plotting_basemap_background.html

我在下面给出了相关数据帧的代码和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

crs与我从上面链接的示例中得到的完全相同(该示例适用于我)

我如何找出问题所在?多年来,我使用folium或ipyleaflet在许多绘图中使用了这个geojson文件,我不怀疑它有任何问题。但这里有一个文件的链接-https://drive.google.com/file/d/1HO854_YFTtRaL4e-nPrL43woYou-IY-a/view?usp=sharing

共有1个答案

壤驷宏才
2023-03-14

您的文件已损坏。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中生成,因此它们是倾斜的。

 类似资料:
  • 我正在使用将多个数据帧绘制为点图。此外,我正在同一轴上绘制所有数据帧。 我该如何在情节中加入传奇? 我的代码获取每个数据帧,并在同一个图形上一个接一个地绘制它。 每个数据框都有相同的列 我的代码: 这将在同一绘图上绘制3条线。然而,这个传说却不见了。文档不接受参数。 一个有效的解决方法是创建一个新的数据帧并使用。 但是我想知道是否有一种方法可以为代码创建一个图例,首先向图中依次添加点图,然后添加图

  • 多亏了这个问题的答案,我可以用不同的投影画出地球仪世界地图上的大陆和海洋。 现在我想补充几点,例如geopandas中包含的城市 不幸的是,这些城市被充满的大陆所覆盖。有没有办法让这些城市在地图的前面或上面? 我当前的代码如下: 结果如下所示:

  • 这个问题已经被问到了,但我想找到一个更清楚的解决办法。 给定X是100x2数据,标签是标签向量(从1到9),我绘制散点图如下: 如何添加图例来解释一行代码中的颜色?其他解决方案分别绘制每个标签:

  • 基本上,这个想法是在不使用Qgis的情况下自动化一些工作流。 我无法获得与Geopandas中Qgis功能“向点添加坐标”类似的结果,该功能允许您在当前投影中获取点的x、y坐标,并为表创建新属性。 所以我有一套我玩过的积分。原始形状文件的CRS为epsg 2154(Lambert 93)。我需要以与谷歌地图兼容的格式获取纬度和经度。 谷歌使用epsg 3857谷歌地图。 这个想法是切换到epsg

  • 动态像scrollview中增添内容(demo中是增添图片)。当增添的图片超过视图宽度时,scrollview可以左右滚动查看完整内容。每增添一张图片,增加按钮会往左移动,清空所有图片后,按钮会滑动回原来的位置。 [Code4App.com]

  • 问题内容: 这是一个衍生问题,与[Set line colors]中给出的答案有关 根据颜色图](https://stackoverflow.com/questions/19868548/set-line- 颜色(根据colormap),其中有一个伟大的解决方案是建议绘图 根据颜色条用颜色表示的几行(参见代码和输出图像 以下)。 我有一个列表,其中存储与每一条打印线相关联的字符串,如下所示: 我想