(数据科学学习手札42)folium进阶内容介绍
一、简介
在上一篇(数据科学学习手札41)中我们了解了folium的基础内容,实际上folium在地理信息可视化上的真正过人之处在于其绘制图像的高度可定制化上,本文就将基于folium官方文档中的一些基本示例来展开说明;
二、处理GeoJSON和TopoJSON数据
2.1 GeoJSON数据
GeoJSON是语法规则符合JSON文件的,专用于表示地理信息的一种JSON文件,其在JSON语法的基础上,内部又有着一套固定的语法规则。在folium中我们使用folium.GeoJson()方法来为已有的Map对象添加GeoJson图层,其常用参数如下:
data:传入你想要在地图上绘制的GeoJson数据
style_function:一个自编函数,将自定义的对geojson中特征的风格设置,映射到geojson图层上,默认为None
highlight_function:一个自编函数,用于映射自定义的地图上施加的鼠标事件形式,默认为None
smooth_factor:float型,用于控制每一次缩放时geojson图层元素的光滑程度,该数值越大,意味着元素越光滑;该数值越小,意味着,元素的表现越接近真实坐标
下面是一些基本的例子:
1、绘制线
import folium '''创建底层Map对象'''
m = folium.Map(location=[0.5,100.5],
zoom_start=8,
control_scale=True) '''定义geojson图层'''
gj = folium.GeoJson(data={ "type": "LineString",
"coordinates": [ [100.0, 0.0], [101.0, 1.0] ]
}) '''为m添加geojson层'''
gj.add_to(m) '''显示m'''
m
2、绘制无孔的区域
import folium '''创建底层Map对象'''
m = folium.Map(location=[0.5,100.5],
zoom_start=8,
control_scale=True) '''定义geojson图层'''
gj = folium.GeoJson(data={ "type": "Polygon",
"coordinates": [
[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ]
]
}) '''为m添加geojson层'''
gj.add_to(m) '''显示m'''
m
3、绘制有孔的区域
import folium '''创建底层Map对象'''
m = folium.Map(location=[0.5,100.5],
zoom_start=8,
control_scale=True) '''定义geojson图层'''
gj = folium.GeoJson(data={ "type": "Polygon",
"coordinates": [
[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ],
[ [100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2] ]
]
}) '''为m添加geojson层'''
gj.add_to(m) '''显示m'''
m
4、绘制多点
import folium '''创建底层Map对象'''
m = folium.Map(location=[0.5,100.5],
zoom_start=8,
control_scale=True) '''定义geojson图层'''
gj = folium.GeoJson(data={ "type": "MultiPoint",
"coordinates": [ [100.0, 0.0], [101.0, 1.0] ]
}) '''为m添加geojson层'''
gj.add_to(m) '''显示m'''
m
5、绘制多线
import folium '''创建底层Map对象'''
m = folium.Map(location=[0.5,100.5],
zoom_start=6,
control_scale=True)
'''创建geojson层'''
gj = folium.GeoJson(data={ "type": "MultiLineString",
"coordinates": [
[ [100.0, 0.0], [101.0, 1.0] ],
[ [102.0, 2.0], [103.0, 3.0] ]
]
}) '''将gj添加到m上'''
gj.add_to(m) '''显示m'''
m
6、绘制多面
import folium '''创建底层Map对象'''
m = folium.Map(location=[0.0,100.0],
zoom_start=6,
control_scale=True)
'''创建geojson层'''
gj = folium.GeoJson(data={ "type": "MultiPolygon",
"coordinates": [
[[[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]]],
[[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]],
[[100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2]]]
]
}) '''将gj添加到m上'''
gj.add_to(m) '''显示m'''
m
7、绘制几何集合
import folium '''创建底层Map对象'''
m = folium.Map(location=[0.0,100.0],
zoom_start=6,
control_scale=True)
'''创建geojson层'''
gj = folium.GeoJson(data={ "type": "GeometryCollection",
"geometries": [
{ "type": "Point",
"coordinates": [100.0, 0.0]
},
{ "type": "LineString",
"coordinates": [ [101.0, 0.0], [102.0, 1.0] ]
}
]
}) '''将gj添加到m上'''
gj.add_to(m) '''显示m'''
m
2.2 TopoJSON数据
TopoJSON是GeoJSON按照拓扑学编码之后的扩展形式,相比GeoJSON直接使用Polygon、Point之类的几何体来表示图形,TopoJSON中的每一个几何体都是通过将共享边整合后组成的,这使得TopoJSON相较于GeoJSON,大大地减少了数据冗余,节省存储空间,在folium中,我们使用folium.TopoJson()方法,通过与folium.GeoJson()相似的方法,为地图添加TopoJSON层对象,因此其常用参数同folium.GeoJson(),但没有highlight_function选项,下面是参照folium官方手册的一个简单的例子:
import folium
import os
import json '''将工作目录转至目标文件所在目录'''
os.chdir(r'C:\Users\windows\Desktop\folium') '''读取目标json文件'''
with open('南极冰盖_topo.json') as to:
s = to.readline()
data = json.loads(s) '''创建底层地图对象'''
m = folium.Map(
location=[-59.1759, -11.6016],
tiles='Mapbox Bright',
zoom_start=1
) '''创建TopoJson层对象'''
tj = folium.TopoJson(data,'objects.antarctic_ice_shelf',name='topojson') '''将topojson对象添加到底层地图上'''
tj.add_to(m) '''显示m'''
m
2.3 style_function 在folium.GeoJson()和folium.TopoJson()方法中,都有参数style_function,该参数传入一个自编函数用于控制GeoJson及TopoJson层中的对象视觉参数,自编函数style_function通过返回一个字典类型的变量,来完成上述控制过程,这个字典中常用的键有'color',用于控制边点线的颜色,'weight'用于控制边点线的大小或粗细,'fillOpacity'用于控制面对象中的填充颜色的透明度,'fillColor'用于控制面对象中填充颜色的色彩,建议使用十六进制字符型色彩输入来控制,下面通过一个简单的例子来了解一下style_function的用法:
import folium
import numpy as np '''创建底层地图'''
m = folium.Map(location=[0.0,180.0],
zoom_start=3,
control_scale=True) '''自定义style_function函数'''
def style_function(feature):
return {'fillOpacity': 0.4,
'weight': 2,
'fillColor': '#FFFF33',
'color':'#FFFF33'
} '''创建GeoJson层对象'''
gj = folium.GeoJson(data={ "type": "Polygon",
"coordinates": [[[160,30],[160,-30],[180,-30],[180,30]]]},style_function=style_function) '''将GeoJson层对象添加到底层地图资源上'''
gj.add_to(m) '''显示m'''
m
实际中,可以根据与面对象关联的指标数字,来控制不同水平对应的面对象的颜色,譬如在绘制中国各省经济发展水平的示意图时,就可以将每个省的某个经济指标如人均GDP作为指标数字,在style_function中设置相应的算法来控制面各省面对象的填充颜色以达到类似下图的效果(下图来自folium官方演示demo):
三、热力地图(heatmap)
我们利用folium.plugins.HeatMap()来绘制我们的热力地图,该方法较为简单,主要的传入参数仅有一个data,其格式为[[纬度,经度,数值],[纬度,经度,数值],...,[纬度,经度,数值]],其中每一个单独的点的坐标由嵌套的内层每一个列表的前两个元素来确定,控制热力程度的值由上述列表的第三个值表示,下面是一个简单的例子:
import folium
import numpy as np
from folium.plugins import HeatMap data = (np.random.normal(size=(100, 3)) *
np.array([[1, 1, 1]]) +
np.array([[48, 5, 1]])).tolist()
data
可以看出,data的格式如我们介绍的那样
m = folium.Map([48., 5.], tiles='stamentoner', zoom_start=6) HeatMap(data).add_to(m) m
以上就是关于folium的一些进阶内容,如有笔误,望指出。
(数据科学学习手札42)folium进阶内容介绍的更多相关文章
- (数据科学学习手札61)xpath进阶用法
一.简介 xpath作为对网页.对xml文件进行定位的工具,速度快,语法简洁明了,在网络爬虫解析内容的过程中起到很大的作用,除了xpath的基础用法之外(可参考我之前写的(数据科学学习手札50)基于P ...
- (数据科学学习手札44)在Keras中训练多层感知机
一.简介 Keras是有着自主的一套前端控制语法,后端基于tensorflow和theano的深度学习框架,因为其搭建神经网络简单快捷明了的语法风格,可以帮助使用者更快捷的搭建自己的神经网络,堪称深度 ...
- (数据科学学习手札55)利用ggthemr来美化ggplot2图像
一.简介 R中的ggplot2是一个非常强大灵活的数据可视化包,熟悉其绘图规则后便可以自由地生成各种可视化图像,但其默认的色彩和样式在很多时候难免有些过于朴素,本文将要介绍的ggthemr包专门针对原 ...
- (数据科学学习手札50)基于Python的网络数据采集-selenium篇(上)
一.简介 接着几个月之前的(数据科学学习手札31)基于Python的网络数据采集(初级篇),在那篇文章中,我们介绍了关于网络爬虫的基础知识(基本的请求库,基本的解析库,CSS,正则表达式等),在那篇文 ...
- (数据科学学习手札49)Scala中的模式匹配
一.简介 Scala中的模式匹配类似Java中的switch语句,且更加稳健,本文就将针对Scala中模式匹配的一些基本实例进行介绍: 二.Scala中的模式匹配 2.1 基本格式 Scala中模式匹 ...
- (数据科学学习手札47)基于Python的网络数据采集实战(2)
一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集 ...
- (数据科学学习手札40)tensorflow实现LSTM时间序列预测
一.简介 上一篇中我们较为详细地铺垫了关于RNN及其变种LSTM的一些基本知识,也提到了LSTM在时间序列预测上优越的性能,本篇就将对如何利用tensorflow,在实际时间序列预测任务中搭建模型来完 ...
- (数据科学学习手札36)tensorflow实现MLP
一.简介 我们在前面的数据科学学习手札34中也介绍过,作为最典型的神经网络,多层感知机(MLP)结构简单且规则,并且在隐层设计的足够完善时,可以拟合任意连续函数,而除了利用前面介绍的sklearn.n ...
- (数据科学学习手札32)Python中re模块的详细介绍
一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...
随机推荐
- C与C++混编
了解一下C与C++如何合作,gcc和g++编译出来的东西有什么区别. 工具使用 objdump是个好工具,可以用于查看.o文件的内容,也可以查看可执行文件的内容. 查看符号表 objdump -t f ...
- 关于mysql启动问题---mysqld_safe mysqld from pid file * ended
#在[mysqld]中添加: datadir = /usr/local/mysql/data #添加 log-error = /usr/local/mysql/data/error.l ...
- Hyperledger Fabric 1.0 学习搭建 (四)--- 创建Fabric多节点集群
4.1.配置说明 首先可以根据官方Fabric自带的e2e_cli列子中的集群方案来生成我们自己的集群,与案例不同的是我们需要把容器都分配到不同的服务器上,彼此之间通过网络来进行通信,网络构建完成后则 ...
- 解决zabbix3.4X图形页面中文乱码
解决zabbix3.4X页面中文乱码 1.在windows的C:\Windows\Fonts找到字体文件simkai.ttf2.在zabbix服务器上找到zabbix默认字体文件graphfont.t ...
- July 08th 2017 Week 27th Saturday
You are never wrong to do the right thing. 坚持做对的事情,永远都不会错. I think the translation may be not precis ...
- 50. Pow(x, n) (recursion)
Implement pow(x, n), which calculates x raised to the power n (xn). Example 1: Input: 2.00000, 10 Ou ...
- Kali Linux重设root密码
许久不用的Kali,某天打开竟忘了密码! 网上的方法颇为简单,遂准备亲自试一下. #光标移动到第二行的“恢复模式”,按E进入[编辑模式] ...
- 怎么解决深入学习PHP的瓶颈?
PHP给学习者的感觉是:初学的时候很容易,但是学了2-3年,就深刻感觉遇到了瓶颈,很难深入,放弃又可惜.所谓“鸡肋,食之无味弃之可惜”的感觉很是贴切. 经常会有这种感觉:不学,看似也不后退:学了,好像 ...
- Windows 2008 Scheduled tasks result codes
0 or 0x0: The operation completed successfully. 1 or 0x1: Incorrect function called or unknown funct ...
- JSON数据转换之net.sf.json包的使用
转载 解析json之net.sf.json https://blog.csdn.net/itlwc/article/details/38442667 一.介绍 使用之前需要导入的jar包: json- ...