用不同的轴分层地图

Posted

技术标签:

【中文标题】用不同的轴分层地图【英文标题】:Layering maps with different axes 【发布时间】:2022-01-15 07:22:12 【问题描述】:

我是 python 新手,尝试使用具有两层的 geopandas 创建地图。一层是波特兰市社区的 shapefile,另一层是我要固定的波特兰经纬度数据集。

每个图都可以单独绘制(即我已经做到了那么远),但是分层不起作用,因为用于波特兰市地图的坐标不是经纬度形式。波特兰的开放数据网站上有关于如何使用 QGIS 将 shapefile 转换为 geoJSON 的说明,并在此过程中将 CRS 设置为 EPSG:4269,但我不知道如何在 Python 中使用 shapefile 执行此操作。

图像显示每个绘图都很好,直到我尝试将它们绘制在一起,注意轴...

fig,ax = plt.subplots(figsize = (15,15))
street_map.plot (ax = ax, alpha = .4, color ='grey')

fig,ax = plt.subplots(figsize = (15,15))
#street_map.plot (ax = ax, alpha = .4, color ='grey')
geo_df[geo_df['price']>250].plot(ax=ax, markersize = 20, color = 'blue', marker = "o")

fig,ax = plt.subplots(figsize = (15,15))
street_map.plot (ax = ax, alpha = .4, color ='grey')
geo_df[geo_df['price']>250].plot(ax=ax, markersize = 20, color = 'blue', marker = "o")

【问题讨论】:

欢迎来到python!如果您发布所有必要的代码以到达您卡住的地方,这将对我们有很大帮助 - 理想情况下包括指向 shapefile 的链接。正如一些答案指出的那样,您绝对可以对齐这些,但您需要知道 shapefile 的源 CRS。你是如何阅读 shapefile 的? Fiona 或 geopandas 还是别的什么? 【参考方案1】:

您是否尝试过 geopandas.GeoDataFrame.to_crs() 方法来更改 python 中的 crs?

https://geopandas.org/en/stable/docs/reference/api/geopandas.GeoDataFrame.to_crs.html

【讨论】:

我还没有尝试过,因为我需要更改的 crs 是用于 shapefile ...这是一个地理数据框,还是我需要先将其转换为一个? 你可以看看你的“街道地图”对象的类型来确定,但我很有信心这是因为你可以使用适用于地理数据框的 plot() 方法 我可以通过在街道地图上使用 to_crs() 方法解决这个问题。这是一个简单的修复!【参考方案2】:

我已查找您引用的数据,但仅找到符合 CRS (EPSG:4326) 的 geojson。如果您在另一个 CRS 中有 GeoDataFrame,根据其他评论,请使用 to_crs("EPSG:4326") 使几何图形保持一致。

import requests
import geopandas as gpd
import plotly.express as px

# boundaries
gdf_b = gpd.GeoDataFrame.from_features(
    requests.get(
        "https://www.portlandmaps.com/arcgis/rest/services/Public/COP_OpenData_Boundary/MapServer/3/query?outFields=*&where=1%3D1&f=geojson"
    ).json()
)
# water fountains
gdf_wf = gpd.GeoDataFrame.from_features(
    requests.get(
        "https://opendata.arcgis.com/datasets/070f61b58ac646b0aaf2a223b2dd16fa_84.geojson"
    ).json()
)


px.scatter_mapbox(
    gdf_wf, lon=gdf_wf.geometry.x, lat=gdf_wf.geometry.y, hover_data=["COMMENTARY"]
).update_layout(
    mapbox=
        "style": "carto-positron",
        "layers": ["source": gdf_b.__geo_interface__, "type": "fill", "opacity": 0.3],
    
)

【讨论】:

以上是关于用不同的轴分层地图的主要内容,如果未能解决你的问题,请参考以下文章

中国地图中不同颜色代表的意思

ValueError:长度不匹配:在熊猫数据框中创建分层列时,预期的轴有 0 个元素

颤振不同的轴单元

中国地图上有几种颜色代表啥意思

在相同的轴上绘制不同的 facecolor

Altair Hconcat - 是不是可以在同一个 HConCat 中为图表配置不同的轴?