电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Python繪制地圖神器folium的新人入門指南

瀏覽:4日期:2022-06-18 16:10:07
目錄一、簡介二、安裝方法三、主要功能3.1 各級別地圖 3.1.1 世界地圖3.1.2 國家地圖3.1.3 市級地圖3.2 地圖形式3.3 在地圖上標記3.3.1 普通標記3.3.2 點擊獲取經緯度3.3.3 動態放置標記3.4 熱力圖繪制3.5 密度地圖繪制3.6 自定義地圖區域3.6.1 只繪制邊界,不添加數據3.6.2 繪制邊界,添加數據四、競品對比與優劣勢五、參考資料一、簡介

想通過 Python 繪制精美的地圖?想在地圖上自由的設置各種參數?想獲得靈活的交互體驗?這里就有一款Python 神包滿足你:folium。

folium 建立在 Python 生態系統的數據應用能力和 Leaflet.js 庫的映射能力之上,在Python中操作數據,然后通過 folium 在 Leaflet 地圖中可視化。

folium 相比較于國內百度的 pyecharts 靈活性更強,能夠自定義繪制區域,并且展現形式更加多樣化。

附:官方文檔,官方示例,本文 notebook ,完整代碼及數據。

二、安裝方法

按照官方的教程即可,如果安裝了 conda ,可以直接

conda install -c conda-forge folium

沒有安裝的話就使用

python3 -m pip install folium三、主要功能3.1 各級別地圖

folium 顯示地圖的類為 folium.Map,類的聲明如下

class folium.folium.Map(location=None, width=’100%’, height=’100%’, left=’0%’, top=’0%’, position=’relative’, tiles=’OpenStreetMap’, attr=None, min_zoom=0, max_zoom=18, zoom_start=10, min_lat=-90, max_lat=90, min_lon=-180, max_lon=180, max_bounds=False, crs=’EPSG3857’, control_scale=False, prefer_canvas=False, no_touch=False, disable_3d=False, png_enabled=False, zoom_control=True, **kwargs)

講幾個重要的參數

location 經緯度,list 或者 tuple 格式,順序為 latitude, longitude zoom_start 縮放值,默認為 10,值越大比例尺越小,地圖放大級別越大 tiles 顯示樣式,默認*‘OpenStreetMap’*,也就是開啟街道顯示 crs 地理坐標參考系統,默認為'EPSG3857' 3.1.1 世界地圖

import foliumprint(folium.__version__)# define the world mapworld_map = folium.Map()# display world mapworld_map

Python繪制地圖神器folium的新人入門指南

3.1.2 國家地圖

# define the national mapnational_map = folium.Map(location=[35.3, 100.6], zoom_start=4)# display national mapnational_map

Python繪制地圖神器folium的新人入門指南

3.1.3 市級地圖

其實改變地圖顯示就是改變顯示的經緯度和縮放比例,省級、市級、縣級用法雷同,這里舉一個市級的例子為例,如北京市:

# define the city mapcity_map = folium.Map(location=[39.93, 116.40], zoom_start=10)# display city mapcity_map

Python繪制地圖神器folium的新人入門指南

顯示效果確實是不如百度的😓。

3.2 地圖形式

除了上述正常的地圖顯示外,folium 還提供了非常豐富的多樣化顯示,控制顯示效果的變量是tiles,樣式有OpenStreetMap, Stamen Terrain, Stamen Toner, Mapbox Bright, Mapbox Control Room等等,這里挑選幾個比較常見的

# define the city map,tiles=’Stamen Toner’city_map = folium.Map(location=[39.93, 116.40], zoom_start=10, tiles=’Stamen Toner’)# display city mapcity_map

# define the city map, tiles=’Stamen Terrain’city_map = folium.Map(location=[39.93, 116.40], zoom_start=10, tiles=’Stamen Terrain’)# display city mapcity_map

Python繪制地圖神器folium的新人入門指南

3.3 在地圖上標記3.3.1 普通標記

添加普通標記用 Marker

這里可以選擇標記的圖案。

bj_map = folium.Map(location=[39.93, 115.40], zoom_start=12, tiles=’Stamen Terrain’)folium.Marker( location=[39.95, 115.33], popup=’Mt. Hood Meadows’, icon=folium.Icon(icon=’cloud’)).add_to(bj_map)folium.Marker( location=[39.96, 115.32], popup=’Timberline Lodge’, icon=folium.Icon(color=’green’)).add_to(bj_map)folium.Marker( location=[39.93, 115.34], popup=’Some Other Location’, icon=folium.Icon(color=’red’, icon=’info-sign’)).add_to(bj_map)bj_map

Python繪制地圖神器folium的新人入門指南

添加圓形標記用 Circle 以及 CircleMarker

bj_map = folium.Map(location=[39.93, 116.40], zoom_start=12, tiles=’Stamen Toner’)folium.Circle( radius=200, location=[39.92, 116.43], popup=’The Waterfront’, color=’crimson’, fill=False,).add_to(bj_map)folium.CircleMarker( location=[39.93, 116.38], radius=50, popup=’Laurelhurst Park’, color=’#3186cc’, fill=True, fill_color=’#3186cc’).add_to(bj_map)bj_map

Python繪制地圖神器folium的新人入門指南

3.3.2 點擊獲取經緯度

m = folium.Map(location=[46.1991, -122.1889],tiles=’Stamen Terrain’,zoom_start=13)m.add_child(folium.LatLngPopup())m

通過點擊鼠標便可以獲取點擊出的經緯度。

Python繪制地圖神器folium的新人入門指南

3.3.3 動態放置標記

m = folium.Map( location=[46.8527, -121.7649], tiles=’Stamen Terrain’, zoom_start=13)folium.Marker( [46.8354, -121.7325], popup=’Camp Muir’).add_to(m)m.add_child(folium.ClickForMarker(popup=’Waypoint’))m

Python繪制地圖神器folium的新人入門指南

3.4 熱力圖繪制

因為沒有實際的經緯度坐標數據,所以這里只能模擬一些位置出來,另外每個位置還需要一個數值作為熱力值。

# generated dataimport numpy as npdata = ( np.random.normal(size=(100, 3)) * np.array([[0.1, 0.1, 0.1]]) + np.array([[40, 116.5, 1]])).tolist()data[:3]

數據分布

[[40.04666663299843, 116.59569796477264, 0.9667425547098781], [39.86836537517533, 116.28201445195315, 0.8708549157348728], [40.08123232852134, 116.56884585184197, 0.9104952244371285]]

繪制熱力圖

# HeatMapfrom folium.plugins import HeatMapm = folium.Map([39.93, 116.38], tiles=’stamentoner’, zoom_start=6)HeatMap(data).add_to(m)# m.save(os.path.join(’results’, ’Heatmap.html’))m

Python繪制地圖神器folium的新人入門指南

3.5 密度地圖繪制

folium 不僅可以繪制熱力圖,還可以繪制密度地圖,按照經緯度進行舉例聚類,然后在地圖中顯示。

from folium.plugins import MarkerClusterm = folium.Map([39.93, 116.38], tiles=’stamentoner’, zoom_start=10)# create a mark cluster objectmarker_cluster = MarkerCluster().add_to(m)# add data point to the mark clusterfor lat, lng, label in data: folium.Marker(location=[lat, lng],icon=None,popup=label, ).add_to(marker_cluster)# add marker_cluster to mapm.add_child(marker_cluster)

Python繪制地圖神器folium的新人入門指南

3.6 自定義地圖區域

folium 一個非常有優勢的功能就是自定義區域的繪制了,只要有區域的邊界數據,就可以在地圖中以多種多樣的形式展現出來,這里以 folium 官方的美國地圖為例,源數據是一個 .json 文件,里面包含了各個地區(美國各州)的特征(包括邊界經緯度列表、簡稱等),源數據傳送門,其數據格式如下:

Python繪制地圖神器folium的新人入門指南

3.6.1 只繪制邊界,不添加數據

如果只要求繪制邊界,而不顯示邊界區域的相關信息,那么這個是比較容易的,代碼如下

import jsonimport requests# read us-states border with open('us-states.json') as f: us_states = json.load(f)us_map = folium.Map(location=[35.3, -97.6], zoom_start=4)folium.GeoJson( us_states, style_function=lambda feature: {’fillColor’: ’#ffff00’,’color’: ’black’,’weight’: 2,’dashArray’: ’5, 5’ }).add_to(us_map)#display mapus_map

Python繪制地圖神器folium的新人入門指南

3.6.2 繪制邊界,添加數據

當需要在各個區域填充數據的時候,這個稍微麻煩點,不僅需要各個區域的邊界數據,還需要各個區域的顯示信息,這里同樣也使用官方的美國各州的邊界數據為例:

import geopandas as gpdimport pandas as pdimport folium, brancastates = gpd.GeoDataFrame.from_features(us_states, crs=fiona.crs.from_epsg(4326))states.head()

Python繪制地圖神器folium的新人入門指南

我們再把收入等數據連接到上表中

abbrs = pd.read_json(open('abbrs.json'))statesmerge = states.merge(abbrs,how=’left’, left_on=’name’, right_on=’name’)statesmerge[’geometry’]=statesmerge.geometry.simplify(.05)income = pd.read_csv('income.csv', dtype={'fips':str})income[’income-2015’]=pd.to_numeric(income[’income-2015’], errors=’coerce’)income.groupby(by='state')[[’state’,’income-2015’]].median().head()statesmerge[’medianincome’]=statesmerge.merge(income.groupby(by='state')[[’state’,’income-2015’]].median(), how=’left’, left_on=’alpha-2’, right_on=’state’)[’income-2015’]statesmerge[’change’]=statesmerge.merge(income.groupby(by='state')[[’state’,’change’]].median(), how=’left’, left_on=’alpha-2’, right_on=’state’)[’change’]statesmerge.head()

Python繪制地圖神器folium的新人入門指南

最終繪制出的來的地圖如下:

Python繪制地圖神器folium的新人入門指南

除此之外,還有很多非常有趣的功能,這里就不一一列舉了,感興趣的可以參考官方的文檔。

四、競品對比與優劣勢

國內的競品為百度的 pyecharts,和 folium 一樣都可以實現普通的地圖繪制功能,但是具體使用還有較大的區別,具體如下表

功能 pyecharts folium 備注 世界地圖 可以 可以中文顯示 可以 部分可以 folium地圖中標尺、文字不能正常顯示,但是嵌入地圖中的中文可以正常顯示 交互性 好 好區(縣)級地圖 可以 可以 folium需要區(縣)邊界數據 市級地圖 可以 可以 folium需要市邊界數據 收費 自定義區域需要購買百度ak 自定義區域功能免費靈活性 好 好省級地圖 可以 可以 folium需要省邊界數據 美觀度 好 較好自定義區域 部分可以 可以 pyecharts需要百度 ak,folium免費 五、參考資料

[1] https://www.zhihu.com/question/33783546

[2] https://pypi.org/project/folium/

[3] https://nbviewer.jupyter.org/github/python-visualization/folium/tree/master/examples/

到此這篇關于Python繪制地圖神器folium的文章就介紹到這了,更多相關Python繪制地圖folium內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 检验科改造施工_DSA手术室净化_导管室装修_成都特殊科室建设厂家_医疗净化工程公司_四川华锐 | 蓝莓施肥机,智能施肥机,自动施肥机,水肥一体化项目,水肥一体机厂家,小型施肥机,圣大节水,滴灌施工方案,山东圣大节水科技有限公司官网17864474793 | 济南网站建设_济南网站制作_济南网站设计_济南网站建设公司_富库网络旗下模易宝_模板建站 | 交流伺服电机|直流伺服|伺服驱动器|伺服电机-深圳市华科星电气有限公司 | 渣油泵,KCB齿轮泵,不锈钢齿轮泵,重油泵,煤焦油泵,泊头市泰邦泵阀制造有限公司 | [官网]叛逆孩子管教_戒网瘾学校_全封闭问题青少年素质教育_新起点青少年特训学校 | 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 低温柔性试验仪-土工布淤堵-沥青车辙试验仪-莱博特(天津)试验机有限公司 | 双相钢_双相不锈钢_双相钢圆钢棒_双相不锈钢报价「海新双相钢」 双能x射线骨密度检测仪_dxa骨密度仪_双能x线骨密度仪_品牌厂家【品源医疗】 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | 天津次氯酸钠酸钙溶液-天津氢氧化钠厂家-天津市辅仁化工有限公司 | 阜阳成人高考_阜阳成考报名时间_安徽省成人高考网 | 定制液氮罐_小型气相液氮罐_自增压液氮罐_班德液氮罐厂家 | 成都治疗尖锐湿疣比较好的医院-成都治疗尖锐湿疣那家医院好-成都西南皮肤病医院 | 空调风机,低噪声离心式通风机,不锈钢防爆风机,前倾皮带传动风机,后倾空调风机-山东捷风风机有限公司 | 深圳市人通智能科技有限公司| 皮带机-带式输送机价格-固定式胶带机生产厂家-河南坤威机械 | 常州减速机_减速机厂家_常州市减速机厂有限公司 | 电销卡_稳定企业大语音卡-归属地可选-世纪通信 | 304不锈钢无缝管_不锈钢管厂家 - 隆达钢业集团有限公司 | 期货软件-专业期货分析软件下载-云智赢 | 工业风机_环保空调_冷风机_工厂车间厂房通风降温设备旺成服务平台 | 顺景erp系统_erp软件_erp软件系统_企业erp管理系统-广东顺景软件科技有限公司 | 仿古建筑设计-仿古建筑施工-仿古建筑公司-汉匠古建筑设计院 | cnc精密加工_数控机械加工_非标平键定制生产厂家_扬州沃佳机械有限公司 | 医用空气消毒机-医用管路消毒机-工作服消毒柜-成都三康王 | 赛尔特智能移动阳光房-阳光房厂家-赛尔特建筑科技(广东)有限公司 | 铝合金风口-玻璃钢轴流风机-玻璃钢屋顶风机-德州东润空调设备有限公司 | 无锡网站建设_小程序制作_网站设计公司_无锡网络公司_网站制作 | IIS7站长之家-站长工具-爱网站请使用IIS7站长综合查询工具,中国站长【WWW.IIS7.COM】 | 北京普辉律师事务所官网_北京律师24小时免费咨询|法律咨询 | 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 | 高博医疗集团上海阿特蒙医院 | 都江堰招聘网-都江堰人才网 都江堰人事人才网 都江堰人才招聘网 邢台人才网_邢台招聘网_邢台123招聘【智达人才网】 | 校园气象站_超声波气象站_农业气象站_雨量监测站_风途科技 | 贝朗斯动力商城(BRCPOWER.COM) - 买叉车蓄电池上贝朗斯商城,价格更超值,品质有保障! | 菏泽知彼网络科技有限公司 | 电动球阀_不锈钢电动球阀_电动三通球阀_电动调节球阀_上海湖泉阀门有限公司 | 电动高压冲洗车_价格-江苏速利达机车有限公司 | 翅片管散热器价格_钢制暖气片报价_钢制板式散热器厂家「河北冀春暖气片有限公司」 | 冷凝水循环试验箱-冷凝水试验箱-可编程高低温试验箱厂家-上海巨为(www.juweigroup.com) |