用python代码实现画热力地图,一种是基于百度地图,点状的热力图(经纬度坐标),另一种是统计行政区域内的频数,实现块状的热力图。
基于百度地图的热力图
import pandas as pd
import os
import numpy as np
#import seaborn as sns
import folium
import webbrowser
from folium.plugins import HeatMap
os.chdir(r'E:\Desktop_file\ZJ\POI')
data0 = './data0/'
data = pd.read_csv(data0+'data1.csv')
data = data[0:365]
data_dm1 = data.iloc[:, [4, 3]]
data_dm1['n'] = 1
data_dm2 = np.array(data_dm1)
data_dm3 = data_dm2.tolist()
map_osm = folium.Map(location=[30.594488,114.315898,],zoom_start=10) #绘制Map,开始缩放程度是5倍
HeatMap(data_dm3).add_to(map_osm) # 将热力图添加到前面建立的map里
file_path = r"E:\Desktop_file\ZJ\POI\map.html"
map_osm.save(file_path) # 保存为html文件
webbrowser.open(file_path)
这是一个看起来很高大上的地图,输入数据是经纬度。如果数据不是经纬度的话,可以利用百度API进行查找进行转换。
基于pyecharts的行政区域热力图
from pyecharts import Map
val = [100, 150, 134, 200, 89, 43, 176, 123, 56, 144, 186, 63, 155]
quxian = ['江岸区', '江汉区', '硚口区', '汉阳区', '武昌区', '洪山区', '东西湖区', '蔡甸区', '江夏区', '黄陂区', '新洲区', '汉南区', '青山区']
map3 = Map("武汉地图",'武汉市', width=1200, height=600)
map3.add("武汉市", quxian, val, visual_range=[1, max(val)], maptype=u'武汉', is_visualmap=True,
visual_text_color='#000', name_map = True, is_map_symbol_show = False, is_label_show = True)
map3.render(path="./wuhanxxx.html")
下面是图的样子:
这里详细介绍一下pyecharts模块中的add函数中的参数:
- 第一个参数是名字。在本代码中是”武汉市”。
- 第二个参数是本地图中的各个行政区域。
- 第三个参数是各个地区对应的数值。
visual_range=[1, max(val)]
这个参数是左下角尺标的范围。maptype=u'武汉'
这个参数是表示你需要画的地图的名称。如果要画中国地图,这里就填maptype='china'
。is_visualmap=True
如果填False地图上就没有颜色了。visual_text_color='#000'
文本的颜色。name_map = True
是否显示地图的名称。is_map_symbol_show = False
填True的画,每个有数据的行政区中会有一个红点。is_label_show = True
默认为False,填True的画会显示行政区的名字。
以上参数了解清楚之后就能够很好的选择自己想要的地图了。说实话我觉得这个图长得还可以,但是被diss掉了。
暂时没有找到合适的画热力地图的办法,但是据说可以在R上面试试,R的可拓展性应该会更好,等我找到更好的办法就更新的博客,敬请期待~
参考文献:
https://blog.csdn.net/u012535605/article/details/79194697
http://www.pianshen.com/article/475838162/