#python #numpy #heatmap #numpy-ndarray #folium
#питон #numpy #тепловая карта #numpy-ndarray #folium
Вопрос:
Я пытаюсь использовать folium.plugins.Тепловая карта для создания тепловой карты. Но возникла сложная проблема. У меня есть свои широты и долготы в ndarray следующим образом:
latlongs = Chicago_Crime[['latitude','longitude']].to_numpy()
latlongs
array([[ 42.00167049, -87.67386364],
[ 41.74736206, -87.70842371],
[ 41.91786266, -87.74460059],
...,
[ 41.68908506, -87.65078948],
[ 41.75257724, -87.58211309],
[ 41.75244573, -87.58088691]])
Затем я использую следующие коды для тепловой карты:
from folium import plugins
from folium.plugins import HeatMap
# let's start again with a clean copy of the map of Chicago
map_chicago = folium.Map(location=[latitude, longitude],zoom_start=10)
latlongs = Chicago_Crime[['latitude','longitude']].to_numpy()
HeatMap(latlongs).add_to(map_chicago)
map_chicago
Однако появилась некоторая ошибка, связанная с размером переданного мной массива, и я просто не понимаю ее, поскольку я передаю (n,2) массив numpy по мере необходимости.
TypeError Traceback (most recent call last)
<ipython-input-160-481a68e5e955> in <module>
7 latlongs = Chicago_Crime[['latitude','longitude']].to_numpy()
8 folium.TileLayer('cartodbpositron').add_to(map_chicago) #cartodbpositron cartodbdark_matter
----> 9 HeatMap(latlongs).add_to(map_chicago)
10 map_chicago
~anaconda3libsite-packagesfoliumpluginsheat_map.py in __init__(self, data, name, min_opacity, max_zoom, max_val, radius, blur, gradient, overlay)
43 max_val=1.0, radius=25, blur=15, gradient=None, overlay=True):
44 super(TileLayer, self).__init__(name=name)
---> 45 if _isnan(data):
46 raise ValueError('data cannot contain NaNs, '
47 'got:n{!r}'.format(data))
~anaconda3libsite-packagesfoliumutilities.py in _isnan(values)
70 def _isnan(values):
71 """Check if there are NaNs values in the iterable."""
---> 72 return any(math.isnan(value) for value in _flatten(values))
73
74
~anaconda3libsite-packagesfoliumutilities.py in <genexpr>(.0)
70 def _isnan(values):
71 """Check if there are NaNs values in the iterable."""
---> 72 return any(math.isnan(value) for value in _flatten(values))
73
74
TypeError: only size-1 arrays can be converted to Python scalars
Что я могу попробовать дальше?
Комментарии:
1. Мне нужны данные в виде массива, который объединяет широту, долготу и три значения, которые я хочу превратить в тепловую карту.
[[42.00167049, -87.67386364, 5.25],[....
Посмотрите на этот образец .
Ответ №1:
Пример кода показывает, как добавить тепловую карту на карту:
import folium
from folium.plugins import HeatMap
import numpy as np
latitude, longitude = 48, 5
data = (
np.random.normal(size=(100, 3)) *
np.array([[1, 1, 1]])
np.array([[48, 5, 1]])
).tolist()
m = folium.Map([48, 5], zoom_start=10)
HeatMap(data).add_to(folium.FeatureGroup(name='Heat Map').add_to(m))
folium.LayerControl().add_to(m)
m
Выходное изображение похоже:
Комментарии:
1. Спасибо вам за ответ. На самом деле я сделал то же самое, что и в вашем ответе, чтобы перенести мой массив numpy в список, и это сработало. Но для меня это странно, так как в библиотеке folium говорится, что мы можем передать массив numpy…
2. @joeW Рад помочь, да, я не думаю, что они хорошо поработали с документами