Я пытаюсь создать свою первую карту хороплета с фолием.
У меня есть pandas фрейм данных, который я успешно использовал для подачи карты круга фолиума, так что я довольно уверен, что я не не может быть проблемы с содержанием данных. Приведенная ниже функция сгенерировала мою карту очень хорошо.
def plot_cases(cases_date):
folium_map = folium.Map(location=[40.738, -73.98],
zoom_start=1,
tiles="CartoDB dark_matter",
width='100%')
#add a circle marker for each row in data
for index, row in cases_date.iterrows():
# generate the popup message that is shown on click.
popup_text = "Cases: {}<br> Country: {}<br> Province/State: {}"
popup_text = popup_text.format(row["Cases"], row["Country/Region"], row["Province/State"])
#radius of circle
radius = row["Cases"]/1000
# choose the color of the marker
if row["Cases"] > 0:
color="#E37222" # tangerine
else:
color="#0A8A9F" # teal
# add circle on map
folium.CircleMarker(location=(row["Lat"],
row["Long"]),
radius=radius,
color=color,
popup=popup_text,
fill=True).add_to(folium_map)
return folium_map
Теперь, когда я пытаюсь сгенерировать свой хороплет с тем же pandas df, единственная новая концепция, которую я представляю, это захват карты мира geo JSON файл из git репо:
#get geoJSON
req = requests.get('https://raw.githubusercontent.com/python-visualization/folium/master/examples/data/world-countries.json')
geofile = req.json()
#instantiate map and enter choropleth params
m = folium.Map(location=[40.738, -73.98],zoom_start=1,tiles="CartoDB dark_matter",width='100%')
choropleth = folium.Choropleth(
geo_data = geofile,
name='choropleth',
data=choro_data,
columns=['Country/Region', 'Cases'],
key_on='feature.properties.name',
fill_color='YlGn',
fill_opacity=0.7,
line_opacity=0.2,
legend_name='Cases',
highlight=True,
line_color='black'
).add_to(m)
folium.LayerControl(collapsed=True).add_to(m)
m
Приведенный выше код хорлоплета генерирует следующую трассировку:
TypeError Traceback (most recent call last)
<ipython-input-15-27efeb8f5173> in <module>
12 legend_name='Cases',
13 highlight=True,
---> 14 line_color='black'
15 ).add_to(m)
16
~/cases/map/lib/python3.6/site-packages/folium/features.py in __init__(self, geo_data, data, columns, key_on, bins, fill_color, nan_fill_color, fill_opacity, nan_fill_opacity, line_color, line_weight, line_opacity, name, legend_name, overlay, control, show, topojson, smooth_factor, highlight, **kwargs)
1076 if color_data is not None and key_on is not None:
1077 real_values = np.array(list(color_data.values()))
-> 1078 real_values = real_values[~np.isnan(real_values)]
1079 _, bin_edges = np.histogram(real_values, bins=bins)
1080
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
hpaulj предположил, что есть проблема с json. Вы можете просмотреть json у источника, но я также вытащил образец из print(geofile)
:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"name": "Afghanistan"
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
61.210817,
35.650072
],
[
62.230651,
35.270664
],
[
62.984662,
35.404041
],
[
63.193538,
35.857166
],
[
63.982896,
36.007957
],
[
64.546479,
36.312073
],
[
64.746105,
37.111818
],
[
65.588948,
37.305217
],
[
65.745631,
37.661164
],
[
66.217385,
37.39379
],
[
66.518607,
37.362784
],
[
67.075782,
37.356144
],
[
67.83,
37.144994
],
[
68.135562,
37.023115
],
[
68.859446,
37.344336
],
[
69.196273,
37.151144
],
[
69.518785,
37.608997
],
[
70.116578,
37.588223
],
[
70.270574,
37.735165
],
[
70.376304,
38.138396
],
[
70.806821,
38.486282
],
[
71.348131,
38.258905
],
[
71.239404,
37.953265
],
[
71.541918,
37.905774
],
[
71.448693,
37.065645
],
[
71.844638,
36.738171
],
[
72.193041,
36.948288
],
[
72.63689,
37.047558
],
[
73.260056,
37.495257
],
[
73.948696,
37.421566
],
[
74.980002,
37.41999
],
[
75.158028,
37.133031
],
[
74.575893,
37.020841
],
[
74.067552,
36.836176
],
[
72.920025,
36.720007
],
[
71.846292,
36.509942
],
[
71.262348,
36.074388
],
[
71.498768,
35.650563
],
[
71.613076,
35.153203
],
[
71.115019,
34.733126
],
[
71.156773,
34.348911
],
[
70.881803,
33.988856
],
[
69.930543,
34.02012
],
[
70.323594,
33.358533
],
[
69.687147,
33.105499
],
[
69.262522,
32.501944
],
[
69.317764,
31.901412
],
[
68.926677,
31.620189
],
[
68.556932,
31.71331
],
[
67.792689,
31.58293
],
[
67.683394,
31.303154
],
[
66.938891,
31.304911
],
[
66.381458,
30.738899
],
[
66.346473,
29.887943
],
[
65.046862,
29.472181
],
[
64.350419,
29.560031
],
[
64.148002,
29.340819
],
[
63.550261,
29.468331
],
[
62.549857,
29.318572
],
[
60.874248,
29.829239
],
[
61.781222,
30.73585
],
[
61.699314,
31.379506
],
[
60.941945,
31.548075
],
[
60.863655,
32.18292
],
[
60.536078,
32.981269
],
[
60.9637,
33.528832
],
[
60.52843,
33.676446
],
[
60.803193,
34.404102
],
[
61.210817,
35.650072
]
]
]
},
"id": "AFG"
}
]
}