Python?pyecharts實(shí)時(shí)畫圖自定義可視化經(jīng)緯度熱力圖
背景
在業(yè)務(wù)數(shù)據(jù)統(tǒng)計(jì)分析中基本都會(huì)涉及到各省區(qū)的分析,數(shù)據(jù)可視化是數(shù)據(jù)分析的一把利器,這些省區(qū)的數(shù)據(jù)一般會(huì)用地圖可視化出來,這樣一些規(guī)律可以被一面了然發(fā)現(xiàn)
地圖有很多可視化類型,比如:基本地理圖、熱力圖、路徑圖、漣漪圖 等,本篇文章主要介紹 熱力圖,使用的工具百度開源 pyecharts
模擬數(shù)據(jù)以十一期間全國旅游景點(diǎn)熱度為例(虛構(gòu)數(shù)據(jù))
模擬數(shù)據(jù)
基于pyecharts內(nèi)置經(jīng)緯度的熱力圖
pyecharts 中自帶了一些城市的經(jīng)緯度,在畫圖時(shí)只要列出城市 or 省份的名字,即可在地圖中自動(dòng)展示,pyecharts會(huì)根據(jù)城市 or 省份的名字自動(dòng)提取到經(jīng)緯度
安裝完pyecharts包之后,可以在pyecharts包文件夾里面找到相應(yīng)的文件city_coordinates.json
,里面保存了大量的地理名與經(jīng)緯度的信息
一般路徑如下:xxxxxx\Lib\site-packages\pyecharts\datasets\city_coordinates.json
下面用模擬數(shù)據(jù)中 城市
、熱度
列來進(jìn)行熱力圖可視化
左右滑動(dòng)查看完整代碼
import pandas as pd from pyecharts import options as opts from pyecharts.charts import BMap from pyecharts.globals import BMapType import json data=pd.read_excel('熱力圖模擬數(shù)據(jù).xlsx') hotmap = ( BMap(is_ignore_nonexistent_coord=True, #忽略不存在的坐標(biāo) init_opts=opts.InitOpts(width="1300px", height="600px")) .add_schema(baidu_ak="自己申請(qǐng)的key", center=[120.13066322374, 30.240018034923], zoom=5, # 當(dāng)前視角的縮放比例 is_roam=True # 是否開啟鼠標(biāo)縮放和平移漫游 ) .add( "熱度", #圖例 data_pair=[list(z) for z in zip(data['城市'].to_list(), data['熱度'].to_list())], type_="heatmap", label_opts=opts.LabelOpts(formatter=""), ) .set_global_opts( title_opts=opts.TitleOpts(title="十一期間全國旅游景點(diǎn)熱度", pos_left='center', title_textstyle_opts=opts.TextStyleOpts(font_size=32) ), legend_opts=opts.LegendOpts(pos_right='20%'), visualmap_opts=opts.VisualMapOpts() ) .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("基于pyecharts內(nèi)置經(jīng)緯度的熱力圖.html") ) #hotmap.render_notebook()
內(nèi)置經(jīng)緯度
基于自定義經(jīng)緯度的熱力圖
因pyecharts中的 city_coordinates.json
里面存放的均是一些常用的地理經(jīng)緯度,如果想使用自定義的經(jīng)緯度,pyecharts也是支持的
下面用模擬數(shù)據(jù)中 經(jīng)度
、維度
、熱度
列來進(jìn)行熱力圖可視化
import pandas as pd from pyecharts import options as opts from pyecharts.charts import BMap from pyecharts.globals import BMapType import json data=pd.read_excel('熱力圖模擬數(shù)據(jù).xlsx') data_json={} for index,row in data.iterrows(): data_json[row['地名']]=[float(row['經(jīng)度']),float(row['維度'])] with open("BMAP.json","w") as f: json.dump(data_json,f) hotmap = ( BMap(is_ignore_nonexistent_coord=True, #忽略不存在的坐標(biāo) init_opts=opts.InitOpts(width="1300px", height="600px")) .add_schema(baidu_ak="自己申請(qǐng)的key", center=[120.13066322374, 30.240018034923], zoom=5, # 當(dāng)前視角的縮放比例 is_roam=True # 是否開啟鼠標(biāo)縮放和平移漫游 ) .add_coordinate_json("BMAP.json") #加載自定義坐標(biāo) .add( "熱度", #圖例 data_pair=[list(z) for z in zip(data['地名'].to_list(), data['熱度'].to_list())], type_="heatmap", label_opts=opts.LabelOpts(formatter=""), ) .set_global_opts( title_opts=opts.TitleOpts(title="十一期間全國旅游景點(diǎn)熱度", pos_left='center', title_textstyle_opts=opts.TextStyleOpts(font_size=32) ), legend_opts=opts.LegendOpts(pos_right='20%'), visualmap_opts=opts.VisualMapOpts(max_=20) #設(shè)置最大值,目的是為了能夠精確查看自定坐標(biāo)位置 ) .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("基于自定義經(jīng)緯度的熱力圖.html") ) #hotmap.render_notebook()
自定義經(jīng)緯度
pyecharts庫缺點(diǎn)
沒有現(xiàn)成的方法用來直接導(dǎo)入自定義坐標(biāo),需要先把自定義坐標(biāo)寫在json文件中,然后再通過加載文件實(shí)現(xiàn)導(dǎo)入,而沒有一個(gè)直接導(dǎo)入自定義坐標(biāo)的方法,這個(gè)可以從源碼中看出來,如果有一個(gè) add_coordinate_dict
函數(shù)就完美了
缺點(diǎn)
不同地圖坐標(biāo)系區(qū)別
我們通常用經(jīng)緯度來表示一個(gè)地理位置,但是由于一些原因,我們從不同渠道得到的經(jīng)緯度信息可能并不是在同一個(gè)坐標(biāo)系下。
- 高德地圖、騰訊地圖以及谷歌中國區(qū)地圖使用的是GCJ-02坐標(biāo)系
- 百度地圖使用的是BD-09坐標(biāo)系
- 底層接口(HTML5 Geolocation或ios、安卓API)通過GPS設(shè)備獲取的坐標(biāo)使用的是WGS-84坐標(biāo)系
不同的坐標(biāo)系之間可能有幾十到幾百米的偏移,所以在開發(fā)基于地圖的產(chǎn)品,或者做地理數(shù)據(jù)可視化時(shí),我們需要修正不同坐標(biāo)系之間的偏差。
WGS-84 - 世界大地測(cè)量系統(tǒng)
WGS-84(World Geodetic System, WGS)是使用最廣泛的坐標(biāo)系,也是世界通用的坐標(biāo)系,GPS設(shè)備得到的經(jīng)緯度就是在WGS84坐標(biāo)系下的經(jīng)緯度。通常通過底層接口得到的定位信息都是WGS84坐標(biāo)系
GCJ-02 - 國測(cè)局坐標(biāo)
GCJ-02(G-Guojia國家,C-Cehui測(cè)繪,J-Ju局),又被稱為火星坐標(biāo)系,是一種基于WGS-84制定的大地測(cè)量系統(tǒng),由中國國測(cè)局制定。此坐標(biāo)系所采用的混淆算法會(huì)在經(jīng)緯度中加入隨機(jī)的偏移。
國家規(guī)定,中國大陸所有公開地理數(shù)據(jù)都需要至少用GCJ-02進(jìn)行加密,也就是說我們從國內(nèi)公司的產(chǎn)品中得到的數(shù)據(jù),一定是經(jīng)過了加密的。絕大部分國內(nèi)互聯(lián)網(wǎng)地圖提供商都是使用GCJ-02坐標(biāo)系,包括高德地圖,谷歌地圖中國區(qū)等。
BD-09 - 百度坐標(biāo)系
BD-09(Baidu, BD)是百度地圖使用的地理坐標(biāo)系,其在GCJ-02上多增加了一次變換,用來保護(hù)用戶隱私。從百度產(chǎn)品中得到的坐標(biāo)都是BD-09坐標(biāo)系
以上就是Python pyecharts實(shí)時(shí)畫圖自定義可視化經(jīng)緯度熱力圖的詳細(xì)內(nèi)容,更多關(guān)于Python pyecharts實(shí)時(shí)畫圖的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Keras在訓(xùn)練期間可視化訓(xùn)練誤差和測(cè)試誤差實(shí)例
這篇文章主要介紹了Keras在訓(xùn)練期間可視化訓(xùn)練誤差和測(cè)試誤差實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06python的繪圖工具matplotlib使用實(shí)例
這篇文章主要介紹了python的繪圖工具matplotlib使用實(shí)例,需要的朋友可以參考下2014-07-07Python Django路徑配置實(shí)現(xiàn)過程解析
這篇文章主要介紹了Python Django路徑配置實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11用python對(duì)excel進(jìn)行操作(讀,寫,修改)
這篇文章主要介紹了用python對(duì)excel進(jìn)行操作(讀,寫,修改),幫助大家更好的利用python處理表格,感興趣的朋友可以了解下2020-12-12Python自動(dòng)化實(shí)戰(zhàn)之接口請(qǐng)求的實(shí)現(xiàn)
本文為大家重點(diǎn)介紹如何通過 python 編碼來實(shí)現(xiàn)我們的接口測(cè)試以及通過Pycharm的實(shí)際應(yīng)用編寫一個(gè)簡(jiǎn)單接口測(cè)試,感興趣的可以了解一下2022-05-05python實(shí)現(xiàn)從pdf文件中提取文本,并自動(dòng)翻譯的方法
今天小編就為大家分享一篇python實(shí)現(xiàn)從pdf文件中提取文本,并自動(dòng)翻譯的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-11-11pytorch之torch_scatter.scatter_max()用法
這篇文章主要介紹了pytorch之torch_scatter.scatter_max()用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09Django之使用內(nèi)置函數(shù)和celery發(fā)郵件的方法示例
這篇文章主要介紹了Django之使用內(nèi)置函數(shù)和celery發(fā)郵件的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09python通過線程實(shí)現(xiàn)定時(shí)器timer的方法
這篇文章主要介紹了python通過線程實(shí)現(xiàn)定時(shí)器timer的方法,涉及Python線程與定時(shí)器timer的使用技巧,需要的朋友可以參考下2015-03-03