利用python實現(xiàn)可視化大屏
下文要實現(xiàn)的可視化大屏內(nèi)容:需要在地圖上將我司船舶的軌跡展示出來。聽起來很簡單,一開始我也是這樣想的。通過一些BI工具應(yīng)該可以輕松實現(xiàn),比如這樣的:

仔細觀察可以看到,這種軌跡是兩點之前的弧線,適合用來展示航空的航線或者起點終點方向類型軌跡,而加載了插件后發(fā)現(xiàn),其功能是無法支持船舶軌跡的數(shù)據(jù)的,所以該插件被pass掉了。
百度已經(jīng)無法找到合適的資源了,于是我又轉(zhuǎn)向了微信公眾號搜索,我發(fā)現(xiàn)了folium這個地圖可視化的庫。它的可視化地圖讓人著迷,也支持不同的瓦片(高德,谷歌,也有內(nèi)置的)風(fēng)格供你選擇,可以在地圖上描繪點,圈,直線,熱力圖等風(fēng)格的圖片,但是如何將軌跡在地圖上描繪出來,不論是如何搜索技術(shù)文章,也無論是看官方文檔,能實現(xiàn)軌跡的只能通過點來描繪,當(dāng)點足夠密集,就相當(dāng)于軌跡了,類似于中國臺風(fēng)網(wǎng)這種圖的樣式,
如下圖:

但現(xiàn)實情況是,我們船舶的軌跡是沒有如此頻繁的軌跡數(shù)據(jù)的,那么folium包也沒有辦法實現(xiàn)我的需求。終于,功夫不負有心人,plotly 這個可視化的包被我找到了。
1、實踐之軌跡地圖
軌跡地圖使用plotly包,具體腳本如下,數(shù)據(jù)為自己模擬數(shù)據(jù)。
import ?os
import plotly.graph_objects as go
import plotly as py
url = r'D:\working_directory\task\文章\shipping_line.html'
mapbox_access_key = '需要你自己去mapbox的網(wǎng)站去申請一個賬號'
style = 'streets'
# 采用的風(fēng)格為streets類型
fig = go.Figure()
color_map = ['#7bd3f6', '#bcbd22', '#17becf','#d62728']
lat_li = []
lng_li = []
for item in [(122.180204,30.806457),(123.256865,29.762908),(123.366728,28.631261),(122.048368,26.350981),(120.048857,24.705378),(119.060087,22.835386),(119.543486,19.433918),(119.960966,16.276336),(116.159697,11.413759),(110.183134,5.067372),(105.173368,0.064226),(101.833525,1.909575),(101.833525,1.909575),(101.833525,1.909575),(88.122587,3.840643),(80.300322,5.154913),(76.433134,7.338996),(71.247587,13.900433),(63.425322,22.246862),(56.394072,25.857701)]:
? ? lng_li.append(item[0])
? ? lat_li.append(item[1])
fig.add_trace(go.Scattermapbox(
? ? name='vessel',
? ? mode='markers+lines',
? ? lon=lng_li,
? ? lat=lat_li,
? ? marker={'size': 2, 'color': color_map[3]},
? ? showlegend=False
))
fig.update_layout(
? ? margin={'l': 0, 't': 0, 'b': 0, 'r': 0}
? ? , mapbox={
? ? ? ? 'center': {'lon': 90, 'lat': 8},
? ? ? ? 'zoom': 1
? ? ? ? , 'style': style
? ? ? ? , 'accesstoken': mapbox_access_key}
)
if os.path.isfile(url):
? ? os.remove(url)
py.offline.plot(fig, filename=url, auto_open=False)
# 保存為html文件效果圖如下:

2、最終制作出來的效果圖
就這樣,對大屏各個模板進行打磨,我們最終效果圖是這樣的。

3、大屏的由來

相關(guān)文章
Python的Asyncore異步Socket模塊及實現(xiàn)端口轉(zhuǎn)發(fā)的例子
asyncore模塊是封裝過的處理socket事件的模塊,采用異步的處理方式,這里我們講來講解Python的Asyncore異步Socket模塊及實現(xiàn)端口轉(zhuǎn)發(fā)的例子,需要的朋友可以參考下2016-06-06
django之對django內(nèi)置的User模型進行自定義擴展方式
這篇文章主要介紹了django之對django內(nèi)置的User模型進行自定義擴展方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05
python機器學(xué)習(xí)高數(shù)篇之泰勒公式
這篇文章主要介紹了python機器學(xué)習(xí)高數(shù)篇之函數(shù)極限和導(dǎo)數(shù),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08
在CMD窗口中調(diào)用python函數(shù)的實現(xiàn)
本文主要介紹了在CMD窗口中調(diào)用python函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07

