folium库的使用
1、库介绍
folium是js上著名的地理信息可视化库leaflet.js为Python提供的接口,folium使在交互式传单地图上可视化在 Python 中处理的数据变得容易。
pip install folium
import folium # 库引用
2、制图函数
class folium.folium.Map(location=None,
width='100%',
height='100%',
left='0%', top='0%',
position='relative',
tiles='OpenStreetMap',
attr=None, min_zoom=0,
max_zoom=18, zoom_start=10, min_lat=-90, max_lat=90, min_lon=-180, max_lon=180, max_bounds=False, crs='EPSG3857', control_scale=False, prefer_canvas=False, no_touch=False, disable_3d=False, png_enabled=False, zoom_control=True, **kwargs)
主要参数介绍:
- location:地图中心位置经纬度 [纬度,经度]
- zoom_start :缩放值,默认为 10,值越大比例尺越小,地图放大级别越大
- titles : 地图样式,默认'OpenStreetMap',此外还包括: "Stamen Toner"、“ Stamen Terrain”。
简单使用:
China_map = folium.Map(
location = [33,113], # location 经纬度 [纬度,经度]
zoom_start =7, # 初始地图大小
tiles ='OpenStreetMap' )
China.save('chart.html') # 保存为HTML
3、添加标记
class folium.map.Marker(
location, # 经纬度
popup=None, # marker 的名字
tooltip=None, # 弹出提示
icon=None, #标记样式
draggable=False, **kwargs)
3.1 添加普通标记
China_map = folium.Map(
location = [33,113], # location 经纬度 [纬度,经度]
zoom_start =7, # 初始地图大小
tiles ="Stamen Toner"
folium.Marker(
location=[34.7, 112.4],
popup='LUO YANG\n[34.7, 112.4]',
icon=folium.Icon(icon='cloud')
).add_to(China_map)
folium.Marker(
location=[34.76, 113.65],
popup='ZHEGN ZHOU\n[34.76, 113.65]',
icon=folium.Icon(color='green')
).add_to(China_map)
China_map.add_child(folium.LatLngPopup()) # 启用纬度/经度弹出窗口,点击地图可查询经纬度
China.save('chart.html') # 保存为HTML
3.2 添加自身标记
China_map = folium.Map(
location = [33,113], # location 经纬度 [纬度,经度]
zoom_start =7, # 初始地图大小
tiles ="Stamen Terrain"
China_map.add_child(folium.LatLngPopup()) # 启用纬度/经度弹出窗口,点击地图可查询经纬度
China_map.add_child(folium.ClickForMarker(popup="marker")) # 设置自动标记,点击地图即可自动标记
China_map.save('chart.html') # 保存为HTML
3.3 添加区域 folium.Circle、folium.CircleMarker
class folium.Circle(
radius, # 区域大小
location,
popup=None,
color="crimson",
fill=False,
class folium.CircleMarker(
location,
radius, # 区域大小
popup, # 内容
color, # 线条颜色
fill=True, # 区域内是否填充
fill_color, # 区域内颜色
)
两个区别在于,CircleMarker会随着地图缩放扩大而改变,
China_map = folium.Map(
location = [33,113], # location 经纬度 [纬度,经度]
zoom_start =7, # 初始地图大小
tiles ="Stamen Terrain"
folium.Circle(
radius=1000, # 区域大小
location=[33.75,113.46],
popup="circle",
color="#ff9900", # 橙色圆环
fill=False,
).add_to(China_map)
folium.CircleMarker(
radius=50, # 区域大小
location=[34.75,114.46],
popup="circle",
color="#93c47d",
fill=True,
fill_color="#93c47d", # 区域内颜色
).add_to(China_map)
China_map.save('chart.html') # 保存为HTML
4、根据省份填充颜色
folium可以根据json文件,分辨不同的经纬度,从而进行上色,中国区域内经纬度可以从gitee上获取
最终获取河南省的经纬情况(.choropleth)
China_map = folium.Map(
location = [33,113], # location 经纬度 [纬度,经度]
zoom_start =7, # 初始地图大小
tiles ="Stamen Toner"
China_map.choropleth(
geo_data = open('china.json',encoding = 'utf-8').read(),
fill_color='#FFD700'
) # china.json 是存放河南省经纬情况的文件 ,file_color 填充颜色
5、根据河南地区降水量制作热力图
5.1 获取河南全境内的经纬度以及降水量,并存放在rain.xlsx 文件内
5.2 读取文件,将经纬度和降水量变为list
5.3 使用HeatMap制作热力图
import folium
import pandas as pd
from folium.plugins import HeatMap
import numpy as np
data = pd.read_excel('rain.xlsx') # 读取文件内容