【Python】Python的那些"地图"神器!

本文梳理多个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();
72371bcd49f888381c10677a5f13ef7a.png 更多栗子,

c69128ff464dbb1aa8e18c1d14f71a43.png4e95dedb8e0b19c505b48eae9fd4c8ba.png33861c74f2df54c711d67920c9db4c43.png深入学习: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

f7bbb98ab92479b89bba653a207c726f.png再举个栗子,
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

e6e529e87167b2857242ed0a4125b5ad.pngMinicharts39eb9662ddce46e34b991cf3cf45627c.pngMarker36b14424e200f349ec271828e79c5884.png8cd6dff1bf8b3affbc049a9956ad63e1.pngImageOverlay7984fb61c4ca1c8bc8997f03596397d6.pngchoroplethc394b3fafe7163785d61f159061baee6.pngHeatmap with timebef0fb547fb6976f7dbd1e6c1d22898e.gifMiniMap7d314bf4036c1cee185bb51fdad8d4d4.png除此之外,Folium还有很多的插件,如draw5662dce08f17fa625a44dec7edc97f01.gif深入学习:http://python-visualization.github.io/folium/index.html


Echarts/pyecharts

pyecharts擅长商业交互可视化,地图是其重要一部分,有大量demo,代码拿来即可用。快速入门👉:快速上手pyecharts
三维动态世界地图c95a93183e122a6dcab697fd8792988a.gif91db5effd23f7b82ab12f8d4dcc71489.gif世界航线图1226a89ff069890c93e6de23a5110f8d.gifbus路径图a5f0a304ceaccad87c8e18414db34198.gif中国地图49c240b432ae5e6c6cba791a91480f4d.png8bba248f8659867325cfb17eeb1fd79b.gif可视化大屏db19b3596b6160366141c5dc9a27dc2a.png纽约街道数据c86a1cb1efd3e5e1a401cf1e1583e364.png深入学习:https://github.com/pyecharts/pyecharts


ipyleaflet

ipyleafletJupyter Notebook的一个扩展擅长交互式地图
安装

pip install ipyleaflet
jupyter nbextension enable --py --sys-prefix ipyleaflet

举个栗子,

from ipyleaflet import Map, MagnifyingGlass, basemaps, basemap_to_tiles

m = Map(center=(30.5538, 114.31589), zoom=1.5)

topo_layer = basemap_to_tiles(basemaps.OpenTopoMap)
magnifying_glass = MagnifyingGlass(layers=[topo_layer])

m.add_layer(magnifying_glass)

m

016057f34a95c2fc2fd4e3d7cbb47f1f.gif更多栗子,c4b53682fe880529dd65e60cf86ce2fc.gif4e611019af9f2c495296417ab2d5d06c.gif进一步学习:https://github.com/jupyter-widgets/ipyleaflet/tree/stable


Cartopy

Cartopy为Basemap的继承者。
安装

brew install proj geos #安装依赖
pip install cartopy -i https://pypi.tuna.tsinghua.edu.cn/simple #清华源光速安装

举个栗子,
路线图

import cartopy
import matplotlib.pyplot as plt

plt.figure(dpi=150)
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']

ax = plt.axes(projection=ccrs.PlateCarree())  #默认投影PlateCarree
ax.stock_img()

x_lon, x_lat = -55, -10,
wh_lon, wh_lat = 114.30943, 30.59982

plt.plot(
    [x_lon, wh_lon],
    [x_lat, wh_lat],
    color='#dc2624',
    linewidth=1,
    marker='o',
    transform=ccrs.Geodetic(),
)

plt.plot(
    [x_lon, wh_lon],
    [x_lat, wh_lat],
    color='#01a2d9',
    linestyle='--',
    transform=ccrs.PlateCarree(),
)

plt.text(x_lon - 3,
         x_lat - 12,
         'xx市',
         horizontalalignment='right',
         transform=ccrs.Geodetic())

plt.text(wh_lon + 3,
         wh_lat - 12,
         '武汉',
         horizontalalignment='left',
         transform=ccrs.Geodetic())

7d90e8f1e4d74d9853bfcd950fa0ab71.png更多栗子,df2c2ba5dc4077cfa21265a73bde82a0.pngaf6a16827de4c0dec99a6eb8f236a24a.png6c5983ff4d463c38e613a8256bf73fc2.png交互图3fca7e58129a3b4ff6e1ee8f125e934f.gif风杆图f40d17afb2425372deae68819812f022.pngb45b6795494965864e6c134c3cfe0760.png深入学习:https://scitools.org.uk/cartopy/docs/latest/index.html


geopandas

geopandas依赖pandas、fiona及matplotlib「GeoPandas是Pandas在地理数据处理方向的扩展,使用shapely地理数据分析、fiona执行地理数据读取、matplotlib执行绘图」。举几个栗子~

import matplotlib.pyplot as plt
import geopandas

#读入数据
world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))
cities = geopandas.read_file(
    geopandas.datasets.get_path('naturalearth_cities'))

#画图
fig, ax = plt.subplots(2, 1, dpi=200)
world.plot(column='pop_est', cmap='Set1_r', ax=ax[0])
world.plot(column='gdp_md_est', cmap='Set1', ax=ax[1])
plt.show()

bca0de717060a7813331fd3ed78a56f2.png更多例子,如Plotting with CartoPy2347011d12e4eaa09432ed530f2bd807.pngChoro legends fd50a77eb614eeac333a30df2f723a4a.pngkdeplotb09aa3c97239d02999d53561618d4b0c.png进一步学习:https://github.com/geopandas/geopandas


geoplot

geoplot是一个high-level的Python地理数据可视化工具,是cartopymatplotlib的扩展,geoplot 之于cartopy,犹如seaborn之于matplotlib.直接看demo:桑基图 \(Sankey)3d05369654e84b63d6593c1e40b6c34f.png添加散点a855f2b7e53c6d0bc4b72a517578abd8.png添加核密度估计图619df43772ee9731061ac23f04b929a0.png分级统计图d33277194fab6c0dfeaa4a122f13c8aa.png深入学习:https://github.com/ResidentMario/geoplot


ridge_map

专注于山峦地图绘制,看demoa3738c8b78cdeb9b2cf7b7d8851a70e2.pngf9e9443d5008e186bdf804fddf75a16c.pngd33c097c5d778c01636eb99b48c824d6.png深入学习:https://github.com/ColCarroll/ridge_map


Plotly/plotly-express

专业的交互式可视化工具,在Python、R、JavaScript方向都有API,86fd84cefefec269ec73a920e6b3962d.png快速入门:❤️快速上手plotly-express❤️
subplots947ff349c1ac2bf49d716c1693d661e0.pngab494df7e1ecacc9f8b4c0df460a0621.pngscatter96dc55c16803712eeddd5784b206c720.pngb529dabe28d82fc7b761aee221836328.pngMarker/Line5fd2771257b093e5cc47bf42a9c18509.pnge278eb634a2c33e2fb8a33c06f960e78.pngchoropleth26ed03cb96fe6d5c34faa836faaba2f7.pngaaa3979467573de24d0deb26fc154ba6.pngDensity Heatmapbe01cf4202401f715226115043fc4e33.pngfacets5dd0b3f97ced74ac196d4570ffa008a3.png深入学习:https://plotly.com/python/


mapnik

mapnik底层为 C++ ,拥有Python、 Node等的API,号称Python最强大的开源地图渲染工具,知名的OpenStreetMap、mapbox等底层都是mapnik,不过学习成本有点高,a557aadc76f13e733d5726d0c7e9f4e9.pngf5310132caa4d1a22e8e0ed38eeeaef7.png4969490108fb5c523940aa3c715dc473.png深入学习:https://github.com/mapnik/mapnik


Kepler.gl

kepler.glUber开源的用于大规模地理空间数据集的可视化探索工具,可在Jupyter Notebook中使用,这里仅仅展示一些demo,
e530b5fbb63b539dc84f63a93aea1fca.png9c189362fa8f01da1527804bd5a08470.png6b622ea7bb69377dde065d23484c20bb.pnga3c347ad58eb7b99da8144bfd0455302.png深入学习:https://github.com/keplergl/kepler.gl

-END-

 
 

45db444ef4ecd68042632c428c0e6f6b.jpeg

 
 
 
 
 
 
 
 
往期精彩回顾




适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑机器学习交流qq群955171419,加入微信群请扫码
  • 3
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值