【问题标题】:Plot heatmap (kdeplot) with geopandas用 geopandas 绘制热图(kdeplot)
【发布时间】:2021-11-03 23:47:36
【问题描述】:

我将以下数据存储在 geopandas.DataFrame 对象中。 geometry 是多边形,x 是我想用作热标度的值。

       id                                           geometry   x
9   01001  POLYGON ((-102.10641 22.06035, -102.10368 22.0...   33
19  01002  POLYGON ((-102.05189 22.29144, -102.05121 22.2...    2
29  01003  POLYGON ((-102.68569 22.09963, -102.69087 22.0...    0
39  01004  POLYGON ((-102.28787 22.41649, -102.28753 22.4...    0
49  01005  POLYGON ((-102.33568 22.05067, -102.33348 22.0...   22

我可以使用以下代码绘制地图并根据x 列中的值为每个多边形着色。

t.plot(column='x', cmap='coolwarm', legend=False)
plt.axis('off')
plt.show()

这还不错,但考虑到我在单个对象中拥有多边形和值,我想知道是否有办法使用 geopandas 将此图转换为热图。

【问题讨论】:

  • 实现是否参考this page底部的例子?
  • 是的!事实上,正是这个情节鼓励我发布这个问题。
  • 我在 SO 中进行了搜索,发现了几个示例。比如有thisthis
  • 谢谢。可悲的是,将geoplot.crs.AlbersEqualArea() 传递给projection 会使我的会话崩溃。我再问一次,有没有办法直接用geopandas 做到这一点?

标签: python matplotlib heatmap geopandas


【解决方案1】:

我被推荐使用geoplot

geoplot.kdeplot 需要一个 geopandas.DataFrame 对象,每个点有一行。也就是说,类似于:

        PointID                     geometry
0     204403876  POINT (-101.66700 21.11670)
1     204462769  POINT (-101.66700 21.11670)
2     144407530  POINT (-101.66700 21.11670)
3     118631118  POINT (-101.66700 21.11670)
4     118646035  POINT (-101.66700 21.11670)

然后将这些点绘制在地图上,作为单独的对象传递。

为了在代码中显示这一点,假设多边形存储在df_map 中,点存储在df_points 中。

# Import geoplot
import geoplot
import geoplot.crs as gcrs

# Plot heatmap
ax = geoplot.kdeplot(df_points, projection=gcrs.AlbersEqualArea())

# Add polygons
geoplot.polyplot(df_map, ax=ax)

这应该会产生类似的东西。

很遗憾,我无法发布我的结果,因为 projection=gcrs.AlbersEqualArea() 使我的会话崩溃,但我希望这对将来的某人有所帮助。

【讨论】:

    猜你喜欢
    • 2021-11-04
    • 2016-05-25
    • 2016-11-10
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    相关资源
    最近更新 更多