Python可视化笔记之folium交互地图
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')
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")
好在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)
稍微增加一些循环条件就可以构造出来实用的路径图场景:
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
本文作者: 杜雨
本文来自云栖社区合作伙伴“ 数据小魔方”,了解相关信息可以关注“ 数据小魔方”
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
写出高质量jq代码常记,提高代码性能
论jQuery和javascript性能的文章并不罕见。然而,本文我计划总结一些速度方面的技巧和我本人的一些建议,来提升你的jQuery和javascript代码。好的代码会带来速度的提升。快速渲染和响应意味着更好的用户体验。 首先,在脑子里牢牢记住jQuery就是javascript。这意味着我们应该采取相同的编码惯例,风格指南和最佳实践。 当你准备使用jQuery,我强烈建议你遵循下面这些指南: 一、DOM操作 1.缓存变量 DOM遍历是昂贵的,所以尽量将会重用的元素缓存。 // 糟糕 // 建议 2.繁重的操作中分离元素 如果你打算对DOM元素做大量操作(连续设置多个属性或css样式),建议首先分离元素然后在添加。 // 糟糕 // 建议 3.使用子查询缓存的父元素 正如前面所提到的,DOM遍历是一项昂贵的操作。典型做法是缓存父元素并在选择子元素时重用这些缓存元素。 // 糟糕 // 建议 (高效) 二、选择器 1.避免通用选择符 将通用选择符放到后代选择符中,性能非常糟糕。 // 糟糕 // 建议 2.避免隐式通用选择符 通用选择符有时是隐式的,不容易发现。 // 糟糕 // ...
- 下一篇
Install Node.js
简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。 安装的话其实很容易,只要登陆上官网:https://nodejs.org/en/download/ 如下图: 随后选择自己pc对应的操作系统和位数等,选择后安装即可。 本文是Window 上的安装Node.js,这里采用是Windows Installer (.msi)安装方式安装。选择对应的安装包下载之后,是如下图的一个文件: image.png 双击打开它,会进入安装向导,一直next就可以了,途中可以自定义安装的路径,最后点击Install即可,下图为安装过程的一个截图: image.png 最后安装完成,点击Finish完成安装: image.png 最后检查:进入cmd窗口,输入path查看路径,输入node --version查看版本,无报错即可,安装完成! image...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Hadoop3单机部署,实现最简伪集群
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装