Python可视化笔记之folium交互地图

简介: 本篇主要介绍其在point、line、polygon这三个地理信息场景下得应用

leftlet给R语言提供了很好用的交互式动态地图接口,其在Python中得API接口包名为folium(不知道包作者为何这样起名字,和leaflet已经扯不上关系了),可以满足我们平时常用的热力图、填充地图、路径图、散点标记等高频可视化场景。

本篇主要介绍其在point、line、polygon这三个地理信息场景下得应用:

import pandas as pd
import numpy as np
import os
import folium
from folium import plugins
import webbrowser
import geopandas as gp

Point:

full = pd.read_excel("D:/Python/File/Cities2015.xlsx")
full = full.dropna()

默认情况下folium.Marker函数用于在空间范围内标记点,点得样式是雨滴形状,但是也可以使用folium.RegularPolygonMarker函数来自定义点样式:

schools_map = folium.Map(location=[full['lat'].mean(), full['lon'].mean()], zoom_start=10)
marker_cluster = plugins.MarkerCluster().add_to(schools_map)for name,row in full.iterrows():
     folium.Marker([row["lat"], row["lon"]], popup="{0}:{1}".format(row["cities"], row["GDP"])).add_to(marker_cluster)     
#folium.RegularPolygonMarker([row["lat"], row["lon"]], popup="{0}:{1}".format(row["cities"], row["GDP"]),number_of_sides=10,radius=5).add_to(marker_cluster)

display(schools_map)
#schools_map.save('schools_map.html')
#webbrowser.open('schools_map.html')

image

image

display用于在编辑器内展示交互地图,save方法可以将交互地图以html文件得形式保存至本地磁盘,webbrowser.open方法可以调用默认浏览器打开本地html格式的交互地图。

polygon:

因为leaflet使用的在线地图并不开放地址匹配功能,也就意味着我们无法通过直接输入行政区名称来获取行政区划边界,所以在制作填充地图时,仍然需要我们构建本地素材。

mydata   = pd.read_csv("D:/R/rstudy/Province/geshengzhibiao.csv", encoding = 'gb18030')
china_map = gp.GeoDataFrame.from_file("D:/R/rstudy/CHN_adm/bou2_4p.shp", encoding = 'gb18030')
#china_map = gp.GeoDataFrame.from_file("D:/R/mapdata/State/china.geojson", encoding = 'gb18030')

China_map = folium.Map(location=[35,120], zoom_start=4)
China_map.choropleth(
 geo_data=open('D:/R/mapdata/State/china.geojson',encoding = 'utf-8').read(),
 data=mydata,
 columns=['province', 'zhibiao'],
 key_on= 'feature.properties.name',
 fill_color='YlGn',
 fill_opacity=0.7,
 line_opacity=0.2)
display(China_map)
China_map.save("China_map.html")

image

好在folium的choropleth函数直接支持json格式地图,仅需提供素材地址即可,data中应该包含与json素材中的属性表和地理信息边界保持一致得映射表,columns用于指定要用到的字段名称。key_on用于指定json地图数据中和你指定得data中对应得连接键(相当于主键)。
fill_color可以指定用于配色的colorBrewer调色板。

polyline

folium中得线图制作也较为简单,仅需提供给folium.PolyLine函数一组带有嵌套列表或者元组得经纬度点即可。

mydata1 =full.sample(20).loc[:,["lat","lon"]].values.tolist()
mydata2 =[(i,j) for i,j in full.sample(20).loc[:,["lat","lon"]].values.tolist()]
oneUserMap = folium.Map(location=[40.0764,116.2786],zoom_start=4)
folium.PolyLine(mydata1,color = 'black').add_to(oneUserMap)
display(oneUserMap)
oneUserMap = folium.Map(location=[40.0764,116.2786],zoom_start=4)
folium.PolyLine(mydata2,color = 'black').add_to(oneUserMap)
display(oneUserMap)

image

稍微增加一些循环条件就可以构造出来实用的路径图场景:

def map_fun():
    myresult = full.loc[:,["lat","lon","cities","pop"]].values
    oneUserMap = folium.Map(location=[40.0764,116.2786],zoom_start=4)
    for e in myresult:
        folium.RegularPolygonMarker(
        [e[0],e[1]],
        popup=str(e[2])+":"+str(e[3]),
        fill_color='#769d96',
        number_of_sides=10,
        radius=10
        ).add_to(oneUserMap)
    others    = full.loc[full['cities']!='郑州市',["lat","lon"]].values.tolist()
    for i in range(len(others)):
        zhengzhou = full.loc[full['cities']=='郑州市',["lat","lon"]].values.tolist()
        zhengzhou.append(others[i])
        folium.PolyLine(
            locations = zhengzhou,
            color = 'black'
        ).add_to(oneUserMap)
    display(oneUserMap)
    return Noneif __name__ == '__main__':
    map_fun()

原文发布时间为:2018-07-07
本文作者: 杜雨
本文来自云栖社区合作伙伴“ 数据小魔方”,了解相关信息可以关注“ 数据小魔方

相关文章
|
10天前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
25 1
|
1月前
|
机器学习/深度学习 数据可视化 Python
Python实用记录(三):通过netron可视化模型
使用Netron工具在Python中可视化神经网络模型,包括安装Netron、创建文件和运行文件的步骤。
31 2
Python实用记录(三):通过netron可视化模型
|
9天前
|
数据采集 数据可视化 数据挖掘
使用Python进行数据分析和可视化
【10月更文挑战第33天】本文将介绍如何使用Python编程语言进行数据分析和可视化。我们将从数据清洗开始,然后进行数据探索性分析,最后使用matplotlib和seaborn库进行数据可视化。通过阅读本文,你将学会如何运用Python进行数据处理和可视化展示。
|
1月前
|
搜索推荐 Python
Leecode 101刷题笔记之第五章:和你一起你轻松刷题(Python)
这篇文章是关于LeetCode第101章的刷题笔记,涵盖了多种排序算法的Python实现和两个中等难度的编程练习题的解法。
20 3
|
1月前
|
数据采集 Web App开发 数据可视化
Python爬虫教程:Selenium可视化爬虫的快速入门
Python爬虫教程:Selenium可视化爬虫的快速入门
|
1月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
61 1
|
1月前
|
Python
Python软链接:Python 2与现代Python的交互
Python软链接:Python 2与现代Python的交互
|
30天前
|
数据采集 数据可视化 数据挖掘
使用Python进行数据处理与可视化——以气温数据分析为例
【10月更文挑战第12天】使用Python进行数据处理与可视化——以气温数据分析为例
181 0
|
1月前
|
算法 C++ Python
Leecode 101刷题笔记之第四章:和你一起你轻松刷题(Python)
这篇博客是关于LeetCode上使用Python语言解决二分查找问题的刷题笔记,涵盖了从基础到进阶难度的多个题目及其解法。
15 0
|
1月前
|
算法 C++ Python
Leecode 101刷题笔记之第三章:和你一起你轻松刷题(Python)
本文是关于LeetCode算法题的刷题笔记,主要介绍了使用双指针技术解决的一系列算法问题,包括Two Sum II、Merge Sorted Array、Linked List Cycle II等,并提供了详细的题解和Python代码实现。
12 0