手把手|如何用Python繪製JS地圖?

2020-12-25 大數據文摘

關於轉載授授權

大數據文摘作品,歡迎個人轉發朋友圈,自媒體、媒體、機構轉載務必申請授權,後臺留言「機構名稱+文章標題+轉載」,申請過授權的不必再次申請,只要按約定轉載即可,但文末需放置大數據文摘二維碼。

Folium是建立在Python生態系統的數據整理(Datawrangling)能力和Leaflet.js庫的映射能力之上的開源庫。用Python處理數據,然後用Folium將它在Leaflet地圖上進行可視化。

概念

Folium能夠將通過Python處理後的數據輕鬆地在交互式的Leaflet地圖上進行可視化展示。它不單單可以在地圖上展示數據的分布圖,還可以使用Vincent/Vega在地圖上加以標記。

這個開源庫中有許多來自OpenStreetMap、MapQuest Open、MapQuestOpen Aerial、Mapbox和Stamen的內建地圖元件,而且支持使用Mapbox或Cloudmade的API密鑰來定製個性化的地圖元件。Folium支持GeoJSON和TopoJSON兩種文件格式的疊加,也可以將數據連接到這兩種文件格式的疊加層,最後可使用color-brewer配色方案創建分布圖。

安裝

安裝folium包

開始創建地圖

創建底圖,傳入起始坐標到Folium地圖中:

importfolium

map_osm= folium.Map(location=[45.5236, -122.6750]) #輸入坐標

map_osm.create_map(path='osm.html')

Folium默認使用OpenStreetMap元件,但是Stamen Terrain, Stamen Toner, Mapbox Bright 和MapboxControl空間元件是內置的:

#輸入位置,tiles,縮放比例

stamen =folium.Map(location=[45.5236, -122.6750], tiles='Stamen Toner',zoom_start=13)

stamen.create_map(path='stamen_toner.html')#保存圖片

Folium也支持Cloudmade 和 Mapbox的個性化定製地圖元件,只需簡單地傳入API_key :

custom =folium.Map(location=[45.5236, -122.6750], tiles='Mapbox',

API_key='wrobstory.map-12345678')

最後,Folium支持傳入任何與Leaflet.js兼容的個性化地圖元件:

tileset= r'http://{s}.tiles.yourtiles.com/{z}/{x}/{y}.png'

map =folium.Map(location=[45.372, -121.6972], zoom_start=12,

tiles=tileset, attr='My DataAttribution')

地圖標記

Folium支持多種標記類型的繪製,下面從一個簡單的Leaflet類型的位置標記彈出文本開始:

map_1 =folium.Map(location=[45.372, -121.6972], zoom_start=12,

tiles='Stamen Terrain')

map_1.simple_marker([45.3288,-121.6625], popup='Mt. Hood Meadows')#文字標記

map_1.simple_marker([45.3311,-121.7113], popup='Timberline Lodge')

map_1.create_map(path='mthood.html')

Folium支持多種顏色和標記圖標類型:

map_1 =folium.Map(location=[45.372, -121.6972], zoom_start=12,tiles='Stamen Terrain')

map_1.simple_marker([45.3288,-121.6625], popup='Mt. Hood Meadows',marker_icon='cloud') #標記圖標類型為雲

map_1.simple_marker([45.3311,-121.7113], popup='Timberline Lodge',marker_color='green') #標記顏色為綠色

map_1.simple_marker([45.3300,-121.6823], popup='Some OtherLocation',marker_color='red',marker_icon='info-sign')

#標記顏色為紅色,標記圖標為「info-sign」)

map_1.create_map(path='iconTest.html')

Folium也支持使用個性化的尺寸和顏色進行圓形標記:

map_2 =folium.Map(location=[45.5236, -122.6750], tiles='Stamen Toner',

zoom_start=13)

map_2.simple_marker(location=[45.5244,-122.6699], popup='The Waterfront')

簡單樹葉類型標記

map_2.circle_marker(location=[45.5215,-122.6261], radius=500,

popup='Laurelhurst Park',line_color='#3186cc',

fill_color='#3186cc')#圓形標記

map_2.create_map(path='portland.html')

Folium有一個簡便的功能可以使經/緯度懸浮於地圖上:

map_3 =folium.Map(location=[46.1991, -122.1889], tiles='Stamen Terrain',zoom_start=13)

map_3.lat_lng_popover()

map_3.create_map(path='sthelens.html')

Click-for-marker功能允許標記動態放置:

map_4 =folium.Map(location=[46.8527, -121.7649], tiles='Stamen Terrain',zoom_start=13)

map_4.simple_marker(location=[46.8354,-121.7325], popup='Camp Muir')

map_4.click_for_marker(popup='Waypoint')

map_4.create_map(path='mtrainier.html')

Folium也支持來自Leaflet-DVF的Polygon(多邊形)標記集:

map_5 =folium.Map(location=[45.5236, -122.6750], zoom_start=13)

map_5.polygon_marker(location=[45.5012,-122.6655], popup='Ross Island Bridge',fill_color='#132b5e', num_sides=3,radius=10)#三邊形標記

map_5.polygon_marker(location=[45.5132,-122.6708], popup='Hawthorne Bridge',fill_color='#45647d', num_sides=4,radius=10)#四邊形標記

map_5.polygon_marker(location=[45.5275,-122.6692], popup='Steel Bridge',fill_color='#769d96', num_sides=6, radius=10)#四邊形標記

map_5.polygon_marker(location=[45.5318,-122.6745], popup='Broadway Bridge',fill_color='#769d96', num_sides=8,radius=10) #八邊形標記

map_5.create_map(path='bridges.html')

Vincent/Vega標記

Folium能夠使用vincent 進行任何類型標記,並懸浮在地圖上。

buoy_map= folium.Map(location=[46.3014, -123.7390], zoom_start=7,

tiles='StamenTerrain')

buoy_map.polygon_marker(location=[47.3489,-124.708], fill_color='#43d9de',radius=12, popup=(vis1, 'vis1.json'))

buoy_map.polygon_marker(location=[44.639,-124.5339], fill_color='#43d9de',radius=12, popup=(vis2, 'vis2.json'))

buoy_map.polygon_marker(location=[46.216,-124.1280], fill_color='#43d9de',radius=12, popup=(vis3, 'vis3.json'))

GeoJSON/TopoJSON層疊加

GeoJSON 和TopoJSON層都可以導入到地圖,不同的層可以在同一張地圖上可視化出來:

geo_path= r'data/antarctic_ice_edge.json'

topo_path= r'data/antarctic_ice_shelf_topo.json'

ice_map= folium.Map(location=[-59.1759, -11.6016],tiles='Mapbox Bright', zoom_start=2)

ice_map.geo_json(geo_path=geo_path)#導入geoJson層

ice_map.geo_json(geo_path=topo_path,topojson='objects.antarctic_ice_shelf')#導入Toposon層

ice_map.create_map(path='ice_map.html')

分布圖

Folium允許PandasDataFrames/Series類型和Geo/TopoJSON類型之間數據轉換。Color Brewer 顏色方案也是內建在這個庫,可以直接導入快速可視化不同的組合:

importfolium

importpandas as pd

state_geo= r'data/us-states.json'#地理位置文件

state_unemployment= r'data/US_Unemployment_Oct2012.csv'#美國失業率文件

state_data= pd.read_csv(state_unemployment)

#LetFolium determine the scale

map =folium.Map(location=[48, -102], zoom_start=3)

map.geo_json(geo_path=state_geo,data=state_data,

columns=['State', 'Unemployment'],

key_on='feature.id',

fill_color='YlGn',fill_opacity=0.7, line_opacity=0.2,

legend_name='Unemployment Rate(%)')

map.create_map(path='us_states.html')

基於D3閾值尺度,Folium在右上方創建圖例,通過分位數創建最佳猜測值,導入設定的閾值很簡單:

map.geo_json(geo_path=state_geo,data=state_data,

columns=['State', 'Unemployment'],

threshold_scale=[5, 6, 7, 8, 9,10],

key_on='feature.id',

fill_color='BuPu',fill_opacity=0.7, line_opacity=0.5,

legend_name='Unemployment Rate(%)',

reset=True)

map.create_map(path='us_states.html')

通過Pandas DataFrame進行數據處理,可以快速可視化不同的數據集。下面的例子中,df DataFrame包含6列不同的經濟數據,我們將在下面可視化一部分數據:

2011年就業率分布圖

map_1 =folium.Map(location=[48, -102], zoom_start=3)

map_1.geo_json(geo_path=county_geo,data_out='data1.json', data=df,

columns=['GEO_ID','Employed_2011'],key_on='feature.id',

fill_color='YlOrRd',fill_opacity=0.7, line_opacity=0.3,

topojson='objects.us_counties_20m')#2011就業率分布圖

map_1.create_map(path='map_1.html')

2011年失業率分布圖

map_2 =folium.Map(location=[40, -99], zoom_start=4)

map_2.geo_json(geo_path=county_geo,data_out='data2.json', data=df,

columns=['GEO_ID','Unemployment_rate_2011'],

key_on='feature.id',

threshold_scale=[0, 5, 7, 9, 11,13],

fill_color='YlGnBu', line_opacity=0.3,

legend_name='Unemployment Rate2011 (%)',

topojson='objects.us_counties_20m')#2011失業率分布圖

map_2.create_map(path='map_2.html')

2011年中等家庭收入分布圖

map_3 =folium.Map(location=[40, -99], zoom_start=4)

map_3.geo_json(geo_path=county_geo,data_out='data3.json', data=df,

columns=['GEO_ID','Median_Household_Income_2011'],

key_on='feature.id',

fill_color='PuRd',line_opacity=0.3,

legend_name='Median Household Income2011 ($)',

topojson='objects.us_counties_20m')#2011中等家庭收入分布圖

map_3.create_map(path='map_3.html')

編譯者簡介

回復「志願者」,了解我們及如何加入我們

大數據文摘精彩文章:

回復【金融】 看【金融與商業】專欄歷史期刊文章

回復【可視化】感受技術與藝術的完美結合

回復【安全】 關於洩密、黑客、攻防的新鮮案例

回復【算法】 既漲知識又有趣的人和事

回復【谷歌】 看其在大數據領域的舉措

回復【院士】 看眾多院士如何講大數據

回復【隱私】 看看在大數據時代還有多少隱私

回復【醫療】 查看醫療領域文章6篇

回復【徵信】 大數據徵信專題四篇

回復【大國】 「大數據國家檔案」之美國等12國

回復【體育】 大數據在網球、NBA等應用案例

回復【志願者】了解如何加入大數據文摘

長按指紋,即可關注「大數據文摘」

專注大數據,每日有分享

相關焦點

  • 如何用python來繪製四邊形-python繪製四邊形圖文教程來了
    python的應用有很多,其中還可以用python來繪製四邊形,下面羽憶教程網為您分享如何用python來繪製四邊形的詳細步驟。python繪製四邊形想要用python繪製四邊形,首先需要調用turtle模塊,這個turtle模塊是python內置的一個非常有趣的模塊,安裝python後自帶的,所以只需要簡單的導入就可以了。1、在python中先導入turtle模塊。
  • 使用Python和R繪製數據地圖的十七個經典案例
    在這篇博客中,我將一些優秀的用戶內核變成迷你教程,作為在Kaggle上發布的數據集進行繪製地圖的開始。這篇文章中,你將學習如何用Python和R,使用包括實際代碼示例的幾種方法來布局和可視化地理空間數據。
  • Python-plotnine 核密度空間插值可視化繪製
    好了,下面我們就開始今天的推文內容,本期推文主要包括:scipy.stats.gaussian_kde()函數進行核密度估計計算geopandas 繪製空間地圖及裁剪操作在上期推文中Python-geopandas 中國地圖繪製 中,我們使用了geopandas
  • Python-Cartopy包(1):世界地圖的繪製
    由於地球是球體,而我們使用的地圖是平面的,將球型展開為平面進行繪製時有距離、面積的失真。所以地圖學家們提出了各種各樣的投影方式,來儘量減小某方面的失真。Cartopy作為專業地理製圖庫包,提供了非常多的投影方式,能夠滿足氣象業務的需求(import cartopy.crs as ccrs)。
  • 我是如何從零開始繪製地圖的
    如想加入翻譯小組可加我微信giser2020一年前,我去一個新聞工作室面試平面設計工作的時候,團隊的主管問我作品集裡的地圖是如何做出來的。我給他講述了自己用JavaScript、D3.js、R/Python、QGIS、Mapbox 以及一些其他GIS相關工具作圖的過程,並介紹根據數據類型的不同選取合適的工具。面試官說我的工作流程聽起來很難複製,也很難在不同的項目間進行追溯。我對此評論感到十分不解,因為我一直以來都是使用這些工具來完成項目的,這很複雜嗎?
  • 使用REmap繪製中國地圖
    上次我們介紹了使用ggplot2繪製中國熱力地圖,需要溫習的同學可以點擊以下連結 使用ggplot2繪製中國地圖  。
  • 手把手教你使用ggplot2繪製中國地圖
    自從用了ggplot2包,越來越覺得其博大精深,通過圖層的概念可以繪製豐富的可視化圖形,如常見的散點圖、直方圖、條形圖、折線圖等。今天就教大家如何使用ggplot2實現地圖的繪製,以及如何在地圖中加入氣泡圖和條形圖。本文所使用的數據來自於經管之家moonstone作者提供的流行病學樣本數據。有關地理信息數據可至文後的下載連結。
  • 用R語言繪製動態地圖
    q <- getBaiduMap('北京大學', width=600, height=600, zoom=18, scale = 2, messaging=FALSE)ggmap(q) #繪製地圖getCoordinate函數根據地址得到經緯度# 參考文檔getCoordinate(address,
  • python繪圖 | 空間地圖上散點氣泡繪製
    今天的推文教程使用geopandas進行空間圖表的繪製(geopandas空間繪圖很方便,省去了很多的數據處理過程,而且也完美銜接matplotlib,學習python 空間繪圖的小夥伴可以看下啊),具體為空間氣泡圖的繪製,主要涉及的內容如下:geopandas geojson數據格式讀取並可視化展示geopandas
  • Python可視化庫解析
    1.matplotlibMatplotlib是一個Python 2維繪圖庫,已經成為python中公認的數據可視化工具,通過Matplotlib你可以很輕鬆地畫一些或簡單或複雜地圖形,幾行代碼即可生成線圖、直方圖、功率譜、條形圖、錯誤圖、散點圖等等。
  • 【解密】古人如何繪製地圖?
    自古至今,地圖所起的作用正是如此,有了經緯度的地理坐標,我們才有明確的「方位感」。如今各種導航讓我們的出行十分方便,那麼古代人又是如何繪製地圖的呢?翻看那些老地圖,實在是一件有趣的事情。有的一看就是出自畫師之手,房舍儼然,山川河流工筆勾勒;有的圖文並茂,將物產、民風一一收納,東海產黃魚,就真有一條黃魚附在「海裡」,而一朵棉花,則長在新疆的版圖上。殊不知,古人繪製地圖的學問也很大。
  • 【Python】用pyecharts繪製我國人口分布和遷移地圖
    由於我國省份較多,把數據放在地圖上展示會更加清晰,故本文用Python中的pyecharts庫進行人口分布和遷移繪圖展示。pyecharts的地圖數據主要來源於兩個模塊,一是Map,二是Geo。Map模塊主要實現「世界」、「國家」、「省」、「縣市」等行政地圖的顯示,而Geo主要實現熱力圖等功能地圖的顯示。本文致力於讓大家學會用Python在地圖上進行數據展示。
  • 開源軟體分享-基於JS的三維地圖,可加載3D模型/BIM模型
    加載天地圖底圖同時支持地形圖設置,我們可以從天地圖加載全國或者全球地形圖。這裡先科普一波,啥是天地圖。、走廊、牆、平米、Box盒子、矩形、圓柱橢圓、圓錐、球體、模型等,通過API可以很方便的繪製這些對象。
  • 如何用四步法快速繪製產業招商地圖?
    產業招商地圖作為一種具有信息傳輸和模擬功能的產業載體,已被普遍應用在招商引資工作中。有了產業招商地圖,在招商時就能做到心中有數,該招什麼企業?在什麼節點招?去哪裡招,每個人都很明了。
  • 這可能是 Python裡最強的繪製地圖神器
    今天給大家介紹一個非常 NB 的Python 庫,專門用來繪製地圖的,它叫 Folium 。1. Folium簡介Folium是一個基於leaflet.js的Python地圖庫,其中,Leaflet是一個非常輕的前端地圖可視化庫。即可以使用Python語言調用Leaflet的地圖可視化能力。
  • python可視化庫大全
    matplotlib算是python比較底層的可視化庫,可定製性強、圖表資源豐富、簡單易用、達到出版質量級別。它的構建是為了用最少的代碼快速繪製專業又美觀的圖表。ggplot與python中的pandas有著共生關係。如果打算使用ggplot,最好將數據保存在DataFrames中。即若想使用ggplot,先將數據轉化為dataframe形式。橫向比較的話,plotnine的效果更好。
  • 如何用python畫一隻兔子
    python的用處真的是太廣泛了,今天在網上學習查找資料時,看到有網友用python來畫畫。用python畫出一隻兔子,為大家分享一下:如何用python畫一隻兔子?畫了一隻大耳朵小兔子,靈感來源是jellycat邦尼兔。turtle庫中circle()函數用來畫弧,但和通常先確定原點,再根據半徑、夾角畫弧的方法有所不同。
  • 手把手 |哇!用R也可以跑Python了
    但如果你還想來搞點深度學習,整個自然語言處理,那你可還真得用Python。如果你處於交叉領域,很可能就需要兩種語言切換。後果是,寫個for loop還出bug真的是家常便飯。報警!通過安裝包,你現在可以在R上運行Python的安裝包和函數了~今天文摘菌就來教教你咋用這個reticulate包。
  • 用Python為直方圖繪製擬合曲線的兩種方法
    作者:博觀厚積簡書專欄:https://www.jianshu.com/u/2f376f777ef1直方圖是用於展示數據的分組分布狀態的一種圖形,用矩形的寬度和高度表示頻數分布在python中一般採用matplotlib庫的hist來繪製直方圖,至於如何給直方圖添加擬合曲線(密度函數曲線),一般來說有以下兩種方法。方法一:採用matplotlib中的mlab模塊mlab模塊是Python中強大的3D作圖工具,立體感效果極佳。
  • 手把手教你用python搶票回家過年 !(附代碼)
    本文教大家用Python寫出搶火車票代碼以及實戰。首先看看如何快速查看剩餘火車票?當你想查詢一下火車票信息的時候,你還在上12306官網嗎?或是打開你手機裡的APP?,如argparse, docopt, options...這裡,我們選用docopt這個簡單易用的工具,我們先安裝它:$ pip3 install docoptdocopt可以按我們在文檔字符串中定義的格式來解析參數,在tickets.py中: