python GPS轨迹热力图可视化【folium pyecharts】

更新
最近又发现了更好用的工具keplergl,基本不需要写代码,拿着数据拆箱即用。
欢迎访问我的这篇博客:酷炫Keplergl


工具说明

python中地图可视化的工具有很多,但是找到一个适合自己需求的工具是麻烦事。
对于轨迹热力图的展示,可以使用python中的foliumpyecharts这两种工具。

1、folium
绘制轨迹热力图代码实现相对简单,但是地图渲染加载的很慢,甚至加载不出来,就像下图这样。【前几天还可以,突然就不行了。毕竟一些服务器是在国外,有能力的可以一试;或者使用离线js、css库,教程网上也有】
python GPS轨迹热力图可视化【folium pyecharts】_第1张图片
2、pyecharts
相比之下,pyecharts 就比较友好了,可学习的教程也很多。pyecharts是用于生成Echarts图表的类库,通过python写代码来实现,生成html文件渲染到网页。
【所以我们接下来使用pyecharts来进行轨迹热力图展示】


实现效果

python GPS轨迹热力图可视化【folium pyecharts】_第2张图片


数据说明

  • pychearts官方提供的轨迹热力图可视化案例,用的是自带的数据。轨迹点是通过地名来表示的,而且要先算出热度值作为输入。
  • 我们要解决的问题是,只有一堆轨迹点(无地点信息,只有经纬度值),直接画出对应的热力图。

数据格式如下:

只需要有经纬度这两列即可【8959.csv】:
python GPS轨迹热力图可视化【folium pyecharts】_第3张图片


代码

import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import BMap
from pyecharts.globals import BMapType
import json

df=pd.read_csv(r'C:\Users\JM1307\Desktop\8959.csv') #读取存有经纬度值的文件

# 1、构造json文件
data_json={}
### {0:[经度,纬度],1:[经度,纬度],2:[经度,纬度],……}。
### 每一个坐标需要一个数来作为键,这个键就类似与地名,能代表这个地方
heat_value_list=list(df[['latitude','longitude']].value_counts())  #统计每个位置上的点数,也就是这个位置的热度值
for i,value in enumerate(heat_value_list): 
    data_json[i]=[df[['latitude','longitude']].value_counts().keys()[i][1],df[['latitude','longitude']].value_counts().keys()[i][0]]

# 2、保存json文件
with open("BMAP.json", "w") as f: 
    json.dump(data_json, f)

# 3、生成热力图
hotmap = (
    BMap(is_ignore_nonexistent_coord=True,  #忽略不存在的坐标
         init_opts=opts.InitOpts(width="1300px", height="600px"))
        .add_schema(baidu_ak="PlhFWpA02aoURjAOpnWcRGqw7AI8EEyO", center=[120.13066322374, 30.240018034923],
                    zoom=5,  # 当前视角的缩放比例
                    is_roam=True  # 是否开启鼠标缩放和平移漫游
                    )
        .add_coordinate_json("BMAP.json")  # 加载json文件
        .add(
        "热度",  # 图例
        data_pair=[(str(i),j) for i,j in zip(range(len(heat_value_list)), heat_value_list)],
        ###保存成json文件后,里边的键是字符了,所以要访问这个点的话,我们要str(i)一下
        type_="heatmap",
        label_opts=opts.LabelOpts(formatter="{b}"),
    )
        .set_global_opts(
        title_opts=opts.TitleOpts(title="GPS轨迹热度",
                                  pos_left='center',
                                  title_textstyle_opts=opts.TextStyleOpts(font_size=20)
                                  ),
        legend_opts=opts.LegendOpts(pos_right='40%'),
        visualmap_opts=opts.VisualMapOpts(max_=100)  # 设置最大值,目的是为了能够精确查看自定坐标位置
    )
        .add_control_panel(
        copyright_control_opts=opts.BMapCopyrightTypeOpts(position=3),
        maptype_control_opts=opts.BMapTypeControlOpts(
            type_=BMapType.MAPTYPE_CONTROL_DROPDOWN
        ),
        scale_control_opts=opts.BMapScaleControlOpts(),
        overview_map_opts=opts.BMapOverviewMapControlOpts(is_open=True),
        navigation_control_opts=opts.BMapNavigationControlOpts(),
        geo_location_control_opts=opts.BMapGeoLocationControlOpts(),
    )
        .render("基于自定义经纬度的热力图.html")
)

附:

可用的百度地图API密钥:
nSxiPohfziUaCuONe4ViUP2N
PlhFWpA02aoURjAOpnWcRGqw7AI8EEyO

你可能感兴趣的:(可视化,python,pandas,folium,pyecharts)