在 folium choropleth GeoJSON 多边形中作为工具提示、弹出窗口或标签的文本

Text as tooltip, popup or labels in folium choropleth GeoJSON polygons

Folium 允许创建带有工具提示或弹出文本的标记。我想对我的 GeoJSON 多边形做同样的事情。

我的 GeoJSON 有一个名为 "name" 的 属性(feature.properties.name -> 假设它是美国各州的名称)。除了每个州的失业率之外,我还希望能够将其作为标签显示在我的等值区地图中。我在 pandas dataframe.

"State" 列中也有相同的信息

这可能吗?我会很高兴有一个解决方案,它可以是弹出窗口、工具提示或写在顶部的简单文本标签。

import pandas as pd


url = (
    "https://raw.githubusercontent.com/python-visualization/folium/master/examples/data"
)
state_geo = f"{url}/us-states.json"
state_unemployment = f"{url}/US_Unemployment_Oct2012.csv"
state_data = pd.read_csv(state_unemployment)

m = folium.Map(location=[48, -102], zoom_start=3)

folium.Choropleth(
    geo_data=state_geo,
    name="choropleth",
    data=state_data,
    columns=["State", "Unemployment"],
    key_on="feature.id",
    fill_color="YlGn",
    fill_opacity=0.7,
    line_opacity=0.2,
    legend_name="Unemployment Rate (%)",
).add_to(m)

folium.LayerControl().add_to(m)

m

我过去不得不使用 folium 的 GeoJsonTooltip() 和其他一些步骤来完成这项工作。我很想知道是否有人有更好的方法

  1. 捕获 Choropleth 函数的 return 值
  2. 向 Chorpleth 的底层 geojson 对象添加一个值(例如失业率)
  3. 使用第 2 步中的值创建 GeoJsonTooltip
  4. 将该工具提示添加到分区表的 geojson
url = (
      "https://raw.githubusercontent.com/python-visualization/folium/master/examples/data"
  )
  state_geo = f"{url}/us-states.json"
  state_unemployment = f"{url}/US_Unemployment_Oct2012.csv"
  state_data = pd.read_csv(state_unemployment)
  
  m = folium.Map(location=[48, -102], zoom_start=3)
  
  # capturing the return of folium.Choropleth()
  cp = folium.Choropleth(
      geo_data=state_geo,
      name="choropleth",
      data=state_data,
      columns=["State", "Unemployment"],
      key_on="feature.id",
      fill_color="YlGn",
      fill_opacity=0.7,
      line_opacity=0.2,
      legend_name="Unemployment Rate (%)",
  ).add_to(m)
  
  # creating a state indexed version of the dataframe so we can lookup values
  state_data_indexed = state_data.set_index('State')
  
  # looping thru the geojson object and adding a new property(unemployment)
  # and assigning a value from our dataframe
  for s in cp.geojson.data['features']:
      s['properties']['unemployment'] = state_data_indexed.loc[s['id'], 'Unemployment']
  
  # and finally adding a tooltip/hover to the choropleth's geojson
  folium.GeoJsonTooltip(['name', 'unemployment']).add_to(cp.geojson)
  
  folium.LayerControl().add_to(m)
  
  m