资讯动态

Python Folium 数据可视化入门:用 folium 将生态足迹数据绘制成交互式 Web 地图

发布时间:2026/10/15 1:53:56 来源:尧图企业网站定制
示例工程教程【免费下载链接】materialsBonus materials, exercises, and example projects for our Python tutorials项目地址https://gitcode.com/gh_mirrors/ma/materials点击查看免费下载本篇指南基于本仓库folium-web-maps目录下的 README.md 及配套源码 footprint.py 展开讲解如何用 Python Folium 从一份 CSV 数据出发构建一张带分级着色Choropleth、GeoJSON 国家边界、图例与图层控制器的交互式 Web 地图。读完本文你将掌握 Folium 的安装、地图创建与样式定制、Choropleth 各核心参数geo_data、key_on、bins、fill_color等的完整含义并能把这些代码迁移到自己的数据集上。项目概览与目录结构folium-web-maps是 Real Python 教程Python Folium: Create Web Maps From Your Data的配套示例目录完整代码可运行复现。目录内包含以下文件文件作用footprint.py完整示例脚本读取 CSV 并生成 HTML 地图footprint.csv各国人均生态足迹与生物承载力数据footprint.ipynbJupyter Notebook 版本可逐步演示地图渲染footprint.htmlfootprint.py运行后产出的交互式地图文件requirements.txt教程使用的锁定版本依赖由 pip-compile 生成requirements.in顶层依赖声明仅包含folium与pandas其核心思路非常简单用 pandas 读入表格数据用 Folium 创建 Leaflet 地图再把数据通过folium.Choropleth叠加到 GeoJSON 地理边界上最终导出一个无需后端即可在浏览器中打开查看的 HTML 文件。安装依赖虚拟环境与版本锁定README 推荐的安装方式是先创建并激活虚拟环境再安装folium和pandas。如果想复现教程所用的精确版本直接安装requirements.txt$ python -m venv venv $ source venv/bin/activate # Windows PowerShell 激活命令 # PS venv\Scripts\activate (venv) $ python -m pip install -r requirements.txt查看 requirements.txt 可知这份锁文件由pip-compile requirements.in基于 Python 3.10 生成核心依赖为folium0.13.0与pandas1.5.2并自动带入其间接依赖brancaFolium 的底层可视化组件库、jinja2HTML 模板渲染、numpy、requestsFolium 内部网络请求等。因此本文所有示例的参数行为均以 folium 0.13.0 为基准使用其他版本时请注意 API 兼容性。此外README 特别说明如果你希望使用 Jupyter Notebook 交互式地查看地图渲染效果需要额外安装jupyter(venv) $ python -m pip install jupyter一键复现从脚本到交互式 HTML 地图激活虚拟环境后直接运行示例脚本即可重新生成 README 中提到的 HTML 文件(venv) $ python footprint.py脚本最后一句m.save(footprint.html)会把地图写成一个独立的静态 HTML 文件——它内嵌了 Leaflet.js 与所有地图数据用任意现代浏览器打开 footprint.html 即可查看、缩放和平移整张交互式地图无需任何服务器或 Python 环境。完整代码逐行拆解footprint.py 全文不足三十行却完成了数据读取 → 地图初始化 → 分级着色 → 图层控制 → 导出的完整链路import folium import pandas as pd eco_footprints pd.read_csv(footprint.csv) max_eco_footprint eco_footprints[Ecological footprint].max() political_countries_url ( http://geojson.xyz/naturalearth-3.3.0/ne_50m_admin_0_countries.geojson ) m folium.Map(location(30, 10), zoom_start3, tilescartodb positron) folium.Choropleth( geo_datapolitical_countries_url, dataeco_footprints, columns(Country/region, Ecological footprint), key_onfeature.properties.name, bins(0, 1, 1.5, 2, 3, 4, 5, 6, 7, 8, max_eco_footprint), fill_colorRdYlGn_r, fill_opacity0.8, line_opacity0.3, nan_fill_colorwhite, legend_nameEcological footprint per capita, nameCountries by ecological footprint per capita, ).add_to(m) folium.LayerControl().add_to(m) m.save(footprint.html)下面逐段说明各部分的职责与参数含义。创建并定制基础地图地图初始化与 Web 瓦片样式folium.Map()是最基础的构件。Notebook 中按从简到繁的顺序演示了它的用法import folium m folium.Map() # 默认世界地图 m folium.Map(tilescartodb positron) # 切换到 CartoDB Positron 浅色瓦片示例脚本中使用的是第三种形态——同时指定中心点、缩放级别与瓦片样式m folium.Map(location(30, 10), zoom_start3, tilescartodb positron)location(30, 10)地图中心点经纬度纬度 30、经度 10这里大致对准北非与欧洲交界处便于完整展示欧亚大陆的各国数据zoom_start3初始缩放级别级别越大视野越近如 10 级可看清城市街区tilescartodb positron选用 CartoDB Positron 浅色底图。浅色底图能让后面的彩色分级区域更醒目是 Choropleth 常用的搭配。Notebook 还演示了设置具体城市坐标如温哥华location(49.25, -123.12)来定位本地地图的做法换用你自己的经纬度即可。叠加 GeoJSON 国家边界Folium 可直接加载 GeoJSON 作为矢量图层甚至支持直接传入 URLpolitical_countries_url ( http://geojson.xyz/naturalearth-3.3.0/ne_50m_admin_0_countries.geojson ) folium.GeoJson(political_countries_url).add_to(m)这条 URL 指向 Natural Earth 50m 分辨率的全球国家/地区边界数据Natural Earth 为公共领域地理数据集。注意该 URL 来自外部服务 geojson.xyz运行时需要网络可达你也可以把 GeoJSON 下载到本地后改为本地文件路径避免运行脚本时依赖外部网络。示例脚本在folium.Choropleth的geo_data参数中复用了这个地址Choropleth 会自动在其内部调用GeoJson完成边界的绘制与着色。用 Choropleth 把数据映射到地图上folium.Choropleth是本示例的核心它根据某个数值指标为每个地理区域填充不同颜色从而让数值分布一眼可见。下面逐项说明示例中使用的参数。数据准备生态足迹数据集示例数据 footprint.csv 记录了全球近 190 个国家和地区的人均生态足迹Ecological footprint单位全球公顷/人。关键列包括Rank按人均足迹降序的排名全球总体排第 0 位Country/region国家/地区名称Ecological footprint人均生态足迹Biocapacity人均生物承载力Biocapacity deficit or reserve承载力与足迹的差值负数表示生态赤字。从数据分布可以看出卢森堡15.82、阿鲁巴11.88、卡塔尔10.8位列前三而海地0.61、厄立特里亚0.49、东帝汶0.48处于末位。加载方式与 Notebook 一致都是一行 pandas 即可eco_footprints pd.read_csv(footprint.csv) max_eco_footprint eco_footprints[Ecological footprint].max()其中max()计算出的最大值会在自定义分箱bins时作为最后一个区间的上界。核心参数columns、key_on 与数据匹配机制folium.Choropleth( geo_datapolitical_countries_url, dataeco_footprints, columns(Country/region, Ecological footprint), key_onfeature.properties.name, ... ).add_to(m)参数值含义geo_dataGeoJSON URL地图矢量边界决定按什么形状上色datapandas DataFrame要可视化的业务数据columns(Country/region, Ecological footprint)数据表中名称列与数值列的对应顺序key_onfeature.properties.nameGeoJSON 特征中用于与业务数据对齐的属性路径key_on的取值是 Folium 初学者最容易困惑的地方它指向 GeoJSON Feature 的properties对象中的name属性即各国边界自带的标准英文国家名。Choropleth 会把columns第一列Country/region与key_on对应的名称做匹配匹配成功后用第二列的数值Ecological footprint决定该区域的颜色。因此若你的数据中国家名写法与 GeoJSON 中的name不一致例如United States写成USA地图上就找不到对应区域——这是换用自己数据集时最常见的坑。自定义分箱 bins让颜色分布更有解释力如果不指定binsFolium 会用默认分位算法自动分箱。示例为了突出生态足迹的分布特征手动指定了区间bins(0, 1, 1.5, 2, 3, 4, 5, 6, 7, 8, max_eco_footprint),这 10 个边界把数据切成 9 个颜色区间[0,1)、[1,1.5)、[1.5,2)、[2,3)…[8, max)。区间边界大致对应生态足迹的每消费 1 个地球的档位划分1 表示恰好消耗 1 个地球的资源2 表示 2 个比默认的等宽或分位分箱更贴合数据本身的语义。注意max_eco_footprint是运行时从 CSV 中取出的真实最大值当前数据约为 15.82比固定写死 8 更稳健——即使数据更新最后一个区间也能覆盖到最大值。配色与透明度fill_color、fill_opacity 与 line_opacityfill_colorRdYlGn_r, fill_opacity0.8, line_opacity0.3, nan_fill_colorwhite,fill_colorRdYlGn_r采用红-黄-绿色带并反向_r即数值越大越红、越小越绿。生态足迹越高对地球越不友好用红色警示非常直观若想数值大用绿色去掉_r后缀即可。Folium 支持多种预置色带如YlOrRd、BuPu等。fill_opacity0.8区域填充不透明度01 之间数值越小越透明可透出底图细节。line_opacity0.3区域边界线的透明度示例调得较低让国界显得淡雅不抢数据的视觉焦点。nan_fill_colorwhite数据缺失NaN或无法匹配到 GeoJSON 的区域用白色填充避免出现难看的空白色块。图例与图层命名legend_nameEcological footprint per capita, nameCountries by ecological footprint per capita,legend_name图例标题显示在地图右下角说明色阶对应的指标含义与单位name该图层在图层控制器中显示的名字用于多图层切换时区分彼此。在生成的 footprint.html 中可以看到图例标题 Ecological footprint per capita 与图层名 Countries by ecological footprint per capita 均已正确写入页面。图层控制器 LayerControlfolium.LayerControl().add_to(m)LayerControl会在地图上添加一个图层切换控件允许用户勾选/取消勾选Countries by ecological footprint per capita这一数据图层。当一张地图包含多个图层例如多个指标或叠加了标记点时这个控件能让用户按需开关图层是交互式地图中非常实用的组件。在 Jupyter Notebook 中交互式体验footprint.ipynb 以 Notbook 形式承载了与脚本几乎相同的代码但编排成逐步演示的结构便于边执行边观察Install Folium给出 Windows PowerShell 与 macOS/Linux 两套虚拟环境安装命令Create and Style a Map从folium.Map()默认地图到指定tilescartodb positron再到指定经纬度与zoom_start3Add a GeoJSON Countries Layer演示folium.GeoJson(political_countries_url)加载国家边界Create a Choropleth Map With Your Data用pd.read_csv(footprint.csv)读取数据并head()预览然后完成最小可用的 ChoroplethStyle Your Folium Map依次加入fill_color/fill_opacity/line_opacity/nan_fill_color/legend_name配色方案、自定义bins分箱、以及LayerControl图层控制器。在 Notebook 的代码单元格中地图对象作为单元格最后一个表达式如m会被 Jupyter 直接内联渲染成可交互的地图控件无需手动保存 HTML。这就是 README 建议额外安装jupyter的原因。换用你自己的数据集README 明确指出You can modify the code to make it work with your own dataset. 将示例迁移到自己的数据只需关注三处对齐数据加载把pd.read_csv(footprint.csv)换成你自己的 CSV 路径并确认数值列存在columns 映射把(Country/region, Ecological footprint)替换为名称列名, 数值列名key_on 匹配确保你数据中的地区名称与 GeoJSON 的feature.properties.name一致如果不一致可改用区域编码如 ISO 3166 数字码并同步调整key_on或对名称列做规范化处理。同时建议按需调整bins可基于数据分布动态生成如pd.qcut分位数、fill_color换成符合指标语义的色带以及location/zoom_start对准你关注的区域。运行python footprint.py后浏览器打开新生成的 HTML 即可验证地图效果。依赖管理小结顶层依赖只需在 requirements.in 中声明两行folium pandas运行时 Folium 会自动引入branca负责 HTML 组件与模板渲染、jinja2、requests等间接依赖。若你需要锁版复现教程环境直接使用 requirements.txt如果不想锁版pip install folium pandas即可起步。整个项目的源码遵循 MIT 协议许可文本见仓库根目录的LICENSE。从安装 → 运行 → 参数拆解 → Notebook 交互 → 换用自己的数据你已经掌握了用 Folium 把一张 CSV 变成交互式 Web 地图的完整链路在此基础上可以继续探索folium.Marker、folium.HeatMap等图层把更多类型的数据叠加到同一张地图上。赞分享示例工程教程【免费下载链接】materialsBonus materials, exercises, and example projects for our Python tutorials项目地址https://gitcode.com/gh_mirrors/ma/materials点击查看免费下载相关推荐MemMachine集成指南如何无缝接入LangGraph、Dify、Claude等主流AI平台MemMachine集成指南如何无缝接入LangGraph、Dify、Claude等主流AI平台 MemMachine是一款为AI智能体打造的通用记忆层它提folium 快速上手用 Python 数据能力驱动 Leaflet.js 交互式地图folium 快速上手用 Python 数据能力驱动 Leaflet.js 交互式地图 folium 是 Python 生态中的地理可视化利器它把 Pyth数据可视化数据分析GISscGPT重新定义单细胞智能数据分析的AI引擎scGPT重新定义单细胞智能数据分析的AI引擎 在当今生物信息学领域单细胞RNA测序技术正以前所未有的速度产生海量数据。想象一下每天都有数以百万计的细胞表人工智能基础模型大模型预训练微调深度学习生物信息学科研上一篇推荐开源项目Arduino LoRa —— 实现远距离无线通信的神器下一篇Office Add-ins 开发指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑