Как добавить GeoJsonTooltip в folium.Choopleth класс в folium? - PullRequest
2 голосов
/ 10 марта 2019

У меня есть два слоя хлороплетов, в которые я хотел бы добавить 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.')

Конечный результатЯ ищу то, что когда пользователь наводит курсор на каждый округ в PA, всплывающая подсказка активируется и отображается следующая информация из geoJSON.

Пример geojson

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

1 Ответ

2 голосов
/ 11 марта 2019

Две вещи:

  • Вам нужно использовать класс GeoJsonTooltip, чтобы использовать поля геойсон. Обычный класс Tooltip работает только с простым текстом. Это ошибка, которую вы получаете.
  • Вы можете передать GeoJsonTooltip объекту GeoJson, созданному Choropleth под капотом: GeoJsonTooltip(....).add_to(theft.geojson)
...