问题描述
我正在尝试使用 folium.plugins.Heatmap 来生成热图。但是一个棘手的问题出现了。我在 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
~\anaconda3\lib\site-packages\folium\plugins\heat_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))
~\anaconda3\lib\site-packages\folium\utilities.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
~\anaconda3\lib\site-packages\folium\utilities.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
接下来我可以尝试什么?
解决方法
示例代码向您展示如何在地图上添加热图:
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
输出图像如下: