創(chuàng)建引人入勝的交互式可視化可以極大地增強對數(shù)據(jù)的理解和影響。
交互式地圖是地理空間數(shù)據(jù)最有效的可視化方法之一。地圖提供固有的上下文,并允許直觀地探索模式、集群和異常值。
本文將演示如何使用 Folium 庫通過 Python 構(gòu)建交互式地圖。
該地圖將包含兩層 - 一層顯示火山位置和海拔,另一層顯示國家人口密度。這讓讀者可以直觀地了解火山與全球人口之間的空間關(guān)系。
完整的代碼可以在我的GitHub 存儲庫(https://github.com/Scofield-Idehen/Map_Building_python.git)中找到?,F(xiàn)在,查看交互式地圖以了解哪些見解,分叉它并開始。
我們將首先介紹使用 Folium 和 Pandas 在 Python 中的實現(xiàn)。這將涉及讀取數(shù)據(jù)集、準(zhǔn)備數(shù)據(jù)、配置地圖參數(shù)、添加圖層和標(biāo)記以及保存最終可視化。
然后,我們將重點介紹交互式地圖中可觀察到的一些關(guān)鍵見解和模式。Folium 提供了一種簡單而強大的方法來生成引人注目的基于瀏覽器的地圖。最后,讀者將了解如何將 Python 和 Folium 用于各種地圖和地理空間分析應(yīng)用程序。
執(zhí)行
首先,我們導(dǎo)入 Folium 和 Pandas 庫,它們提供所需的映射功能和數(shù)據(jù)工具:
import folium import pandas
接下來,我們閱讀按國家/地區(qū)劃分的火山位置和人口估計的原始數(shù)據(jù):
data =pandas.read_csv('Volcanoes.txt')
這提供了一個 Pandas 數(shù)據(jù)框,其中包含全球 1,500 多個火山的緯度、經(jīng)度和海拔列。
我們將使用 GeoJSON 文件“world.json”作為國家/地區(qū)人口數(shù)據(jù),其中包含所有國家/地區(qū)的多邊形輪廓和人口統(tǒng)計數(shù)據(jù)。GeoJSON 是一種地理數(shù)據(jù)交換格式,可以與 Folium 等地圖庫完美配合。
我們可以從火山數(shù)據(jù)框中解析并提取我們需要的關(guān)鍵數(shù)據(jù)列:
lat = list(data["LAT"]) lon = list(data["LON"]) ele = list(data["ELEV"])
這提供了要繪制的每個火山的緯度、經(jīng)度和海拔的列表。
接下來,我們定義一個顏色比例函數(shù),它將根據(jù)火山標(biāo)記的海拔值動態(tài)為其著色:
def colour_marker(elevation): if elevation < 1000: return 'red' elif 1000 <= elevation < 3000: return 'orange' else: return 'green'
低海拔地區(qū)為紅色,中海拔地區(qū)為橙色,高海拔地區(qū)為綠色。這將火山海拔高度直觀地編碼到地圖中。
解析數(shù)據(jù)后,我們現(xiàn)在可以創(chuàng)建以北美為中心的基本 Folium 地圖:
map = folium.Map(location=[38.58, -99.08], zoom_start=6, tiles='OpenStreetMap')
我們添加兩個要素組圖層 - 一層用于火山,一層用于人口數(shù)據(jù)。Folium 中的要素組允許輕松打開/關(guān)閉不同地圖元素的可見性。
f = folium.FeatureGroup(name="Volcanoes") fg = folium.FeatureGroup(name="Population")
在這些組中,我們可以添加相應(yīng)的標(biāo)記和疊加層。對于火山,我們循環(huán)遍歷緯度/經(jīng)度/海拔列表,為每個火山添加一個 CircleMarker:
for lt, ln, el in zip(lat, lon, ele): f.add_child(folium.CircleMarker(location=[lt, ln], radius=6, popup=str(el)+" m", fill_color=colour_marker(el), color = 'grey', fill=True, fill_opacity=0.7))
CircleMarkers 由高程顏色函數(shù)著色,并根據(jù)半徑參數(shù)調(diào)整大小。懸停會顯示一個帶有高度的彈出窗口。
對于人口圖層,我們添加基于 GeoJSON 數(shù)據(jù)的分區(qū)統(tǒng)計圖疊加:
fg.add_child(folium.GeoJson(data=open('world.json', 'r', encoding='utf-8-sig').read(), style_function=lambda x: {'fillColor':'green' if x['properties']['POP2005'] < 10000000 else 'orange' if 10000000 <= x['properties']['POP2005'] < 20000000 else 'red'}))
這會根據(jù)人口閾值范圍為每個國家/地區(qū)多邊形著色。GeoJSON 屬性提供每個要素的人口值。
最后,我們使用圖層控件將火山和人口圖層添加到地圖中:
map.add_child(f) map.add_child(fg) map.add_child(folium.LayerControl())
圖層控件添加了一個開關(guān),可以打開/關(guān)閉不同的數(shù)據(jù)層。
然后我們可以將完成的地圖導(dǎo)出到 HTML 文件以在本地查看:
map.save("Population_Volcanoes.html")
見解與分析
由此產(chǎn)生的可視化提供了火山位置、海拔和附近國家人口密度的直觀全球視圖。以下是一些關(guān)鍵見解:
火山集中在與板塊邊界相關(guān)的不同區(qū)域,例如太平洋周圍的太平洋火環(huán)。沿活動大陸邊界可見綠色的高海拔火山。
紅色的低海拔火山出現(xiàn)在板內(nèi)熱點地區(qū),例如美國的夏威夷和黃石公園。這些地區(qū)的活火山與主要板塊邊界隔離。
亞洲和歐洲人口稠密的中心遠(yuǎn)離大多數(shù)火山,而中美洲和南美洲人口中等的國家則直接位于火山帶內(nèi)。這凸顯了墨西哥、哥倫比亞和印度尼西亞等國家面臨的重大火山風(fēng)險。
非洲和南極洲火山稀疏,人口覆蓋范圍廣,而澳大利亞則在人煙稀少的地區(qū)擁有海拔較低的火山。
總體而言,火山和鄉(xiāng)村人口之間的空間相互作用程度為災(zāi)害規(guī)劃和活動區(qū)域的地質(zhì)建模提供了重要的見解。
打開和關(guān)閉人口圖層的功能使您可以輕松關(guān)注火山點圖案。交互式平移和縮放可驅(qū)動對數(shù)據(jù)的直觀探索,這是靜態(tài)圖表或圖表無法實現(xiàn)的。
配色方案還可以實現(xiàn)快速視覺查詢 - 例如,突出顯示紅色高人口中心附近的高風(fēng)險橙色國家。
總體而言,這張地圖有助于更深入地了解全球火山位置及其與人類的關(guān)系。Python 和 Folium 只需 20 行代碼即可生成它。
結(jié)論
在本文中,我們演示了如何使用 Python 中的 Folium 庫快速構(gòu)建交互式地圖可視化。
將火山點數(shù)據(jù)與國家多邊形人口數(shù)據(jù)相結(jié)合,用最少的代碼創(chuàng)建了富有洞察力的地理空間視圖??梢暬捌湓诰€存儲庫為任何想要使用 Python 創(chuàng)建自己的自定義交互式地圖的人提供了一個起點。
該代碼可以通過繪制實時地震數(shù)據(jù)、添加更多火山屬性(例如上次噴發(fā)日期)、根據(jù)火山大小調(diào)整標(biāo)記大小以及合并邊界和道路的矢量圖層來擴展。還可以通過抓取火山附近國家和城市的額外人口統(tǒng)計信息來豐富數(shù)據(jù)。
Folium 是眾多強大的 Python 地理空間庫之一,包括 GeoPandas、笛卡爾和 Contextily。每個都提供了處理矢量和柵格數(shù)據(jù)類型、執(zhí)行空間分析以及生成靜態(tài)和動態(tài)地圖的補充功能。利用這些工具可以為定制地圖應(yīng)用程序提供無限可能。
無論是可視化火山風(fēng)險、模擬氣候變化模式還是了解城市動態(tài),交互式地圖都提供了重要的價值。他們將抽象數(shù)據(jù)集轉(zhuǎn)化為有形的故事和見解。Python 已經(jīng)鞏固了自己作為為任何領(lǐng)域制作可定制、引人入勝的地圖可視化的引人注目的選擇的地位。文章來源:http://www.zghlxwxcb.cn/article/355.html
文章來源地址http://www.zghlxwxcb.cn/article/355.html
到此這篇關(guān)于使用Folium和Python創(chuàng)建交互式地圖 | 地圖可視化教程的文章就介紹到這了,更多相關(guān)內(nèi)容可以在右上角搜索或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!