如何在Folium的Choropleth类中添加GeoJsonTooltip?

8

我有两个区域地图层,我想为它们添加GeoJsonTooltip,但我一直收到错误提示: TypeError: __init__() missing 1 required positional argument: 'text'

我的当前代码如下。

import folium
import pandas as pd
import json

df_theft = pd.read_csv('PA_Theft.csv')
df_assualt = pd.read_csv('PA_Assualt.csv')

theft_json = json.load(open('theft_geojson.json'))
assualt_json = json.load(open('assualt_geojson.json'))

m = folium.Map(location=[41.20, -77.50], tiles="cartodbdark_matter", zoom_start=8.3)

theft = folium.Choropleth(
    geo_data=theft_json,
    data=df_theft,               
    columns=['county_name', 'rate'],
    key_on='feature.properties.county_name',
    fill_color='OrRd',
    fill_opacity=0.9,
    nan_fill_color='#ffffff',
    nan_fill_opacity=0.9,
    legend_name='Incident rate per 100,000 people',
    highlight=True,
    name='Theft'
).add_to(m)

folium.GeoJson(
    theft_json,
    tooltip=folium.features.Tooltip(fields=['feature.properties.county_name'])
).add_to(theft)

assualt = folium.Choropleth(
    geo_data=assualt_json,
    data=df_assualt,               
    columns=['county_name', 'rate'],
    key_on='feature.properties.county_name',
    fill_color='OrRd',
    fill_opacity=0.9,
    nan_fill_color='#ffffff',
    nan_fill_opacity=0.9,
    legend_name='Incident rate per 100,000 people',
    highlight=True,
    name='Assualt'
).add_to(m)

folium.GeoJson(
    assualt_json,
    tooltip=folium.features.Tooltip(fields=['feature.properties.county_name'])
).add_to(assualt)


folium.LayerControl().add_to(m) 
m.save('Crime_Map.html')

print('Map created.')

我希望的最终结果是,当用户将鼠标悬停在宾夕法尼亚州的每个县上时,会触发工具提示弹出窗口,并显示来自geoJSON的以下信息。

示例geojson

  "properties": {
        "county_name": "ADAMS",
        "incident": "Theft",
        "arrests": 24,
        "incident_count": 51,
        "incident_total": 75,
        "population": 102336,
        "rate": 73.2879924953096
      }

2
两件事情:
  • 你需要使用 GeoJsonTooltip 类来使用 geojson 字段。常规的 Tooltip 类只适用于简单文本。这就是您遇到的错误。
  • 您可以将 GeoJsonTooltip 传递给由 Choropleth 在幕后创建的 GeoJson 对象:Choropleth(...).geojson.add_child(GeoJsonTooltip(...))。或者在您的情况下:GeoJsonTooltip(....).add_to(theft.geojson)
- Conengmo
@Conengmo 我想我明白了,但是在 Choropleth 类之后,我添加了 .geojson.add_child(GeoJsonTooltip(fields=['feature']['properties']['county_name'])).add_to(m),结果出现了这个错误 NameError: name 'GeoJsonTooltip' is not defined。这是否意味着 GeoJson 对象在内部没有被创建? - prime90
@Conengmo,我使用了你的第二个选项,成功地让它工作了。谢谢你。 - prime90
好的,收到!我会将其添加为答案。 - Conengmo
1个回答

11

有两件事情:

  • 你需要使用GeoJsonTooltip类来使用geojson字段,普通的Tooltip类只适用于简单的文本。那就是你得到的错误。
  • 你可以将GeoJsonTooltip传递给Choropleth在幕后创建的GeoJson对象:GeoJsonTooltip(....).add_to(theft.geojson)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接