本文梳理多个Python优质地理数据可视化工具,有的擅长交互、有的擅长学术研究、有的擅长商用地图展示。
Basemap
Basemap为地理空间数据可视化利器,偏学院派
。
依赖PROJ.4C,为提供的经纬坐标指定basemap25个投影方式中的一类,每一类都有自己的优缺点,如下文代码中的projection='ortho';
依赖Matplotlib,在PROJ.4C指定的投影方式中绘制海岸线、河流线和政治边界线;
依赖GEOS,将海岸线、河流线和政治边界线裁剪至目的区域;
Basemap创建以来,为了满足地球科学、海洋学、气象学等领域科学家的需求,功能日益强大。但是,自2016年起,Cartopy开始接管了Basemap,至2020年8月7日,后者停止维护,大部分功能转移到Cartopy下
,Basemap依旧可以使用,但是安装起来有点麻烦
。
# 下载源码:https://github.com/matplotlib/basemap/releases/
#解压
tar -zxvf basemap-1.2.2rel.tar.gz
#修改配置
cd basemap-1.2.2rel/geos-3.3.3/
export GEOS_DIR=/usr/local
./configure --prefix=$GEOS_DIR
make #这一步时间有点久,出现好多warning,
make install
cd ../
python setup.py install
举个栗子,我们生活的蓝色星球全貌,
import pyproj
import geos
from mpl_toolkits.basemap import Basemap
# Basemap依赖pyproj和geos,三者一起导入,不然报错
import matplotlib.pyplot as plt
plt.figure(dpi=150,figsize=(6,6))
m = Basemap(
projection='ortho', #指定投影方式ortho
lat_0=0,
lon_0=140, #设置投影中心
resolution=None #设置分辨率
)
m.bluemarble(scale=0.5) #设置蓝色弹珠 (The Blue Marble)背景
plt.show();
深入学习:https://matplotlib.org/basemap/index.html
Folium
Folium
是Python数据处理优势和JavaScript地图库Leaflet.js
地图可视化优势的完美结合,二者结合后即可绘制优美的交互式地图。「小科普
:Folium和Leaf都有叶子的意思,这可能是Folium名称的由来~」
一些栗子~
import folium
whm = folium.Map(
location=[30.5538, 114.31589], #武昌区经纬度
zoom_start=10, # 默认放大倍数
)
folium.Marker( #添加位置标示
location=[30.5538, 114.31589],
popup="❤️武汉",
icon=folium.Icon(color="#ba2f2a", icon="info-sign"),
).add_to(whm)
folium.CircleMarker( #圈地
location=[30.5538, 114.31589],
radius=100, #圈半径
color="#c72e29",
fill=True,
fill_color="#c72e29",
).add_to(whm)
folium.Marker(
location=[30.34653, 114.27001],
popup="❤️",
icon=folium.Icon(color="blue", icon="info-sign"),
).add_to(whm)
folium.CircleMarker(
location=[30.34653, 114.31001],
radius=100,
color="#01a2d9",
fill=True,
fill_color="#01a2d9",
).add_to(whm)
whm
再举个栗子,Heatmap
,
# Heatmap
import numpy as np
import folium
from folium.plugins import HeatMap
data = (np.random.normal(size=(50, 3)) * np.array([[1, 1, 1]]) +
np.array([[39.904989, 116.4052859, 1]])).tolist()
m = folium.Map([39.904989, 116.4052859], zoom_start=6)
HeatMap(data, radius=20).add_to(m)
m
Minicharts
Marker
ImageOverlay
choropleth
Heatmap with time
MiniMap
除此之外,Folium还有很多的插件
,如draw深入学习:http://python-visualization.github.io/folium/index.html
Echarts/pyecharts
pyecharts
擅长商业交互可视化
,地图是其重要一部分,有大量demo,代码拿来即可用。快速入门