分享 11 款 Python 地理数据可视化工具 您所在的位置:网站首页 python地理绘图 分享 11 款 Python 地理数据可视化工具

分享 11 款 Python 地理数据可视化工具

2023-02-22 20:45| 来源: 网络整理| 查看: 265

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

91edbe5591297f9ff60a114d9a5c8863.pngad86ef783fe98fc66df1e57a8dfcc32c.png6d6d6af4c61a4cb10f5c0a037d37bba6.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

6c886adcfaea92cda27fd856cbff5e99.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

b5423a89533573a3f6f6f50ffa313cc0.pngMinicharts4393df1606401c0f98fa217d42d4199c.pngMarkere215f89628c6e2a9f4c24bc322424a8d.png625c557ea6e62df32706dca9d103fb9d.pngImageOverlay059a8ea25442b7ae6a684c9839e9d682.pngchoropleth21bd4f112892dc690336cfb7f9aba6a7.pngHeatmap with timebd264ec46510d02b98356ae7e12e83ac.gifMiniMap5816939c743b81e24e6f0c5634a314f3.png除此之外,Folium还有很多的插件,如draw4357dff1aae3e94d750e7be4091bf4c3.gif深入学习:http://python-visualization.github.io/folium/index.html

Echarts/pyecharts

pyecharts擅长商业交互可视化,地图是其重要一部分,有大量demo,代码拿来即可用。快速入门👉:快速上手pyecharts三维动态世界地图2d5e44c98e4008e1f4045cb22f3813fb.gif2bce3af5482e5a7bfe7aabe84c0552fd.gif世界航线图331703c91e435611e6663c73be44e740.gifbus路径图879833c285cd382886e7cd7167e96b8e.gif中国地图905c8f82010b587aac034e994699e9fb.png233f4bada845c7a83cc4bb37cace2143.gif可视化大屏022ac709d133e8c232dff0582706798d.png纽约街道数据795fe8f95271552f44cf7f47e01dc659.png深入学习:https://github.com/pyecharts/pyecharts

ipyleaflet

ipyleaflet为Jupyter 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

be0c06cf62bd8313b9339434ae11474a.gif更多栗子,badc7feaaf6f33b7772205b38aa397ab.gif1fe09c5f3d71874c85446069e7895229.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())

b715b53f3d4d42e6d91725b3f1509052.png更多栗子,0b23ccbadbf2470a1a3788031136b15b.pnga1d5704f34ba1932f52c9bc270e4b1a8.png8911483aed598c11f4583a35f4c7c05c.png交互图3f28703edec682aaf45db5bd7c3f93b5.gif风杆图1c2b9fafaba7ec42fd37606f90ce26e1.pngdb2c474fbbf6bebb3b565d94735065b4.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()

d9e570724463f962c3b2edc37b8d55cb.png更多例子,如Plotting with CartoPyd0e760673663e7a0c8ce1f206e17cd1d.pngChoro legends cdb9cfe2553effee4183a155b447adcb.pngkdeplot65a4ff8bbcb9913837c9f2bf1410f857.png进一步学习:https://github.com/geopandas/geopandas

geoplot

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

ridge_map

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

Plotly/plotly-express

专业的交互式可视化工具,在Python、R、JavaScript方向都有API,96d422a5305a4bb1f0eaaac56cca8f04.png快速入门:❤️快速上手plotly-express❤️subplots383b1c0b8ffce6f6345f72dd795dc27c.pngd645adf95e9305bbedb54f32a82f22a6.pngscatteree3ed3b259de51bdc512e4b8b09e6063.pngd5f7bfbb817ad28aa9eeadef34c35b69.pngMarker/Line1a98d3568dfed7ec858b03ce12b6d476.pngc8de664f172107a66af4e09fa3552e2f.pngchoroplethce55db2d9f07f5e08950fe09b35cefaf.png1444d5d0379bb1857a9f63f01d5b3f53.pngDensity Heatmapfdd30db6e469e019987119985597a437.pngfacetsa48fdfd5e82ef77a66582cc6e72b793e.png深入学习:https://plotly.com/python/

mapnik

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

Kepler.gl

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

dcbe689e4dd4b8354f115532bfe87638.gif

Python猫技术交流群开放啦!群里既有国内一二线大厂在职员工,也有国内外高校在读学生,既有十多年码龄的编程老鸟,也有中小学刚刚入门的新人,学习氛围良好!想入群的同学,请在公号内回复『交流群』,获取猫哥的微信(谢绝广告党,非诚勿扰!)~

还不过瘾?试试它们

▲我经常读的 9 个英文 Python 网站

▲Python 程序调试分析大杀器合集

▲CPython 有 GIL 是因为当年设计的人偷懒吗?

▲通过 for 循环,比较 Python 与 Ruby 编程思想的差别

▲Python最会变魔术的魔术方法,我觉得是它!

▲Python 之父为什么嫌弃 lambda 匿名函数?

如果你觉得本文有帮助

请慷慨分享和点赞,感谢啦!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有