用Python画出漂亮的地图

用Python画出漂亮的地图

地图可视化是数据分析和地理信息系统中的重要环节。Python提供了多个强大的库,如FoliumMatplotlibGeopandas等,使得创建漂亮而具有信息量的地图变得简单而灵活。本文将详细介绍如何使用这些库绘制漂亮的地图,并提供丰富的示例代码

安装所需库:

首先,确保已经安装了必要的库。可以使用以下命令安装:

pip install folium matplotlib geopandas

使用Folium创建交互式地图:

Folium是一个基于Leaflet.js的Python库,可以轻松创建交互式地图

import folium# 创建地图对象
m = folium.Map(location=[37.7749, -122.4194], zoom_start=12)# 在地图上添加标记
folium.Marker([37.7749, -122.4194], popup='San Francisco').add_to(m)# 保存地图为HTML文件
m.save('interactive_map.html')

使用Matplotlib绘制基本地图:

Matplotlib也提供了地图绘制的功能

import matplotlib.pyplot as plt
import geopandas as gpd# 读取世界地图数据
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))# 绘制世界地图
world.plot()
plt.title('World Map')
plt.show()

使用Geopandas绘制更丰富的地图:

Geopandas是在Pandas基础上构建的地理数据处理库,它简化了地理空间数据的处理和可视化

import geopandas as gpd
import matplotlib.pyplot as plt# 读取世界地图数据
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))# 可视化地图
world.plot(column='gdp_md_est', cmap='OrRd', legend=True, figsize=(15, 10))
plt.title('World Map with GDP')
plt.show()

使用Folium绘制热力图:

Folium不仅可以创建基本地图,还支持绘制热力图,展示数据的空间分布

 import folium
from folium.plugins import HeatMap# 创建地图对象
m = folium.Map(location=[37.7749, -122.4194], zoom_start=12)# 添加热力图数据点
heat_data = [[37.7749, -122.4194] for _ in range(100)]# 添加热力图层
HeatMap(heat_data).add_to(m)# 保存地图为HTML文件
m.save('heatmap.html')

绘制带标记的地图:

有时候需要在地图上标记特定位置,如城市、地标或数据采样点

以下是一个使用GeopandasMatplotlib绘制带标记的地图的示例:

import geopandas as gpd
import matplotlib.pyplot as plt# 读取城市数据
cities = gpd.read_file(gpd.datasets.get_path('naturalearth_cities'))# 绘制世界地图
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
ax = world.plot(figsize=(15, 10))# 在地图上添加城市标记
cities.plot(ax=ax, marker='o', color='red', markersize=50)
plt.title('World Map with City Markers')
plt.show()

使用Plotly创建交互式地图:

Plotly是另一个强大的可视化库,支持创建交互式地图

import plotly.express as px# 读取世界地图数据
world = px.data.world()# 绘制世界地图
fig = px.choropleth(world, locations='iso_alpha', color='pop',hover_name='country', color_continuous_scale='Viridis',title='World Map with Population')
fig.show()

地图美化和定制:

地图的美化和定制是使地图更有吸引力和可读性的关键步骤

以下是一个使用Folium定制地图样式的示例:

import folium# 创建地图对象
m = folium.Map(location=[37.7749, -122.4194], zoom_start=12, control_scale=True)# 添加自定义标记
folium.Marker([37.7749, -122.4194], popup='San Francisco', icon=folium.Icon(color='red')).add_to(m)# 添加自定义边界
folium.RegularPolygonMarker([37.7808, -122.4128], popup='Another Location',fill_color='#132b5e', number_of_sides=4, radius=10).add_to(m)# 添加文本标签
folium.Marker([37.7749, -122.4194], popup='<strong>San Francisco</strong>', tooltip='Click me!').add_to(m)# 保存地图为HTML文件
m.save('customized_map.html')

绘制路径和连接线:

在地图上绘制路径和连接线有助于展示地理关系和运动轨迹。

以下是一个使用Folium在地图上绘制路径的示例:

import folium# 创建地图对象
m = folium.Map(location=[37.7749, -122.4194], zoom_start=12)# 添加路径
folium.PolyLine(locations=[[37.7749, -122.4194], [37.7808, -122.4128]],color='blue', weight=2.5, opacity=1).add_to(m)# 保存地图为HTML文件
m.save('path_map.html')

地图动画:

在一系列时间点上展示地图的变化可以通过地图动画来实现。

以下是一个使用Folium创建地图动画的示例:

import folium
from folium.plugins import TimestampedGeoJson# 创建地图对象
m = folium.Map(location=[37.7749, -122.4194], zoom_start=12)# 添加时间戳地理JSON数据
geojson_data = {'type': 'FeatureCollection','features': [{'type': 'Feature','geometry': {'type': 'Point', 'coordinates': [-122.4194, 37.7749]},'properties': {'time': '2023-01-01T00:00:00'}},{'type': 'Feature','geometry': {'type': 'Point', 'coordinates': [-122.4128, 37.7808]},'properties': {'time': '2023-01-02T00:00:00'}}]
}TimestampedGeoJson(geojson_data, period='PT1H', duration='PT1H').add_to(m)# 保存地图为HTML文件
m.save('animated_map.html')

注意:

以上代码皆为示例代码,并非具体实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/643066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ STL库详解:list的详细模拟实现

一、前言 在详细学习并学习c后&#xff0c;我们对stl库的例如vector、list、string都有了详细的了解&#xff0c;对模板的使用以及类和对象都有了熟练的掌握&#xff0c;而实践才是检验真理的唯一标准&#xff0c;在此片博客中&#xff0c;将利用先前学过的各模块知识来对list…

Springboot+vue的医院后台管理系统(有报告),Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的医院后台管理系统&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的医院后台管理系统&#xff0c;采用M&#xff08…

Java实现 OPC Ua Server服务器创建

前言 我们除了使用KEPServerEX6 创建OPC Ua Server 服务器以外,还可以使用 开源项目org.eclipse.milo 创建一个java项目OPC Ua Server的服务。相对于KEPServerEX6 属于收费的商用版本来说,后者更为简单轻便。下面附加代码和文字说明,教你如何创建一个OPC Ua Server的java服…

vue多层组件监听 v-bind=“$attrs“,v-on=“$listeners“

高层级向低层级传值 v-bind“$attrs” v-bind"$attrs"主要用于高层组件向低层组件隔代传值。 假如有 父组件A&#xff0c;子组件B&#xff0c;孙组件C 三个组件。 A组件中的值需要直接传给C组件&#xff0c;那么就需要在B组件中设置v-bind“$attrs”&#xff0c;然…

LeetCode、875. 爱吃香蕉的珂珂【中等,最小速度二分】

文章目录 前言LeetCode、875. 爱吃香蕉的珂珂【中等&#xff0c;最小速度二分】题目及分类思路分析及代码实现代码优化 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Ja…

如何修改flutter的minSdkVersion版本?

在使用第三方插件的时候&#xff0c;插件对最低的 minSdkVersion版本是有要求的&#xff0c;你比如flutter 插件 webview_flutter 就会报一下错&#xff1a; minSdkVersion 16 cannot be smaller than version 19 declared in library 解决方法①&#xff1a; 这个时候我们需…

Flutter 屏幕适配之相对尺寸适配

在Android中我们可以通过脚本来动态生成适配于各个厂商的屏幕的相对尺寸。 那么在Flutter中我们如何通过相同的思路来实现同样的效果呢&#xff1f;我们知道&#xff0c;Android的每个厂商的屏幕大小存在非常大区别。有些长&#xff0c;有的短&#xff0c;有的粗&#xff0c;有…

Python爬虫框架选择与使用:推荐几个常用的高效爬虫框架

目录 前言 一、Scrapy框架 1. 安装Scrapy 2. Scrapy示例代码 3. 运行Scrapy爬虫 二、Beautiful Soup库 1. 安装Beautiful Soup 2. Beautiful Soup示例代码 3. 运行Beautiful Soup代码 三、Requests库 1. 安装Requests库 2. Requests示例代码 3. 运行Requests代码 …

【蓝桥杯--图论】最小生成树prim、kruskal

今日语录&#xff1a;成功不是终点&#xff0c;失败不是致命&#xff0c;勇气才是取胜的关键。 文章目录 prim算法kruskal算法(稀疏图) prim算法 #include <cstring> #include <algorithm> #include <iostream>#define _CRT_SECURE_NO_WARNINGS using names…

8 种网络协议

什么是网络协议&#xff1f; 网络协议就是计算机之间沟通的语言&#xff0c;为了有效地交流&#xff0c;计算机之间需要一种共同的规则或协议&#xff0c;就像我们和老外沟通之前&#xff0c;要先商量好用哪种语言&#xff0c;要么大家都说中文&#xff0c;要么大家都说英语&a…

微信小程序实现长按 识别图片二维码

第一种方案&#xff08;只需要在image里面加一个属性就可以了&#xff09; show-menu-by-longpress“{{true}}” <image show-menu-by-longpress"{{true}}" src"{{sysset.dyqewm}}" />第二种方案 放大预览图片&#xff0c;长按识别二维码 wxml <…

数灵通实现抖音跳转企业微信啦

抖音是一款流行的短视频应用&#xff0c;用户可以通过简洁、有趣的短视频形式创作和分享内容。 对于企业而言&#xff0c;抖音拥有庞大的用户基础和广泛的影响力&#xff0c;因此企业希望能够利用抖音的平台来推广自己的企业微信账号&#xff0c;与用户建立更紧密的沟通和联系…

css中px和em的区别

px 和 em 是用来表示元素大小的单位&#xff0c;在 CSS 中经常被使用。 px (pixel) 是像素单位&#xff0c;表示屏幕上的一个点。它是一个绝对单位&#xff0c;表示一个固定的大小。例如&#xff0c;一个宽度为 200px 的元素将始终显示为 200 个像素宽。 em 是相对单位&#x…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM平台编程第一天-ARM常见问题1-100问(物联技术666)

链接&#xff1a;https://pan.baidu.com/s/1-u7GvgM0TLuiy9z7LYQ80Q?pwd1688 提取码&#xff1a;1688 第1问: Q:请问在初始化CPU堆栈的时候一开始在执行mov r0, LR这句指令时处理器是什么模式 A:复位后的模式,即管理模式. …

Xftp连接不上Linux虚拟机的原因解决方法

前言&#xff1a; 在当今数字化时代&#xff0c;远程连接到Linux虚拟机是许多开发者和系统管理员日常工作的一部分。然而&#xff0c;有时候&#xff0c;面对Xftp连接不上Linux虚拟机的问题&#xff0c;我们可能感到困惑和无措。这个看似小问题可能导致工作中断&#xff0c;因…

基于taro搭建小程序多项目框架

前言 为什么需要这样一个框架&#xff0c;以及这个框架带来的好处是什么&#xff1f; 从字面意思上理解&#xff1a;该框架可以用来同时管理多个小程序&#xff0c;并且可以抽离公用组件或业务逻辑供各个小程序使用。当你工作中面临这种同时维护多个小程序的业务场景时&#xf…

【MySQL】表列数和行大小限制详解

目录 限制维度 列数量限制 表的最大行大小 单个列的存储要求 存储引擎的附加限制 功能键部分 行容量限制 MySQL表的内部实现 InnoDB表的最大行大小 超出InnoDB最大行大小的处理 不同存储格式的影响 限制示例 行大小限制示例 InnoDB下 MyISAM下 InnoDB变长情况示…

Unity 桥接模式(实例详解)

文章目录 示例1&#xff1a;角色与装备系统示例2&#xff1a;UI控件库示例3&#xff1a;渲染引擎模块示例4&#xff1a;AI决策树算法示例5&#xff1a;物理模拟引擎 在Unity游戏开发中&#xff0c;桥接模式&#xff08;Bridge Pattern&#xff09;是一种设计模式&#xff0c;它…

扩散模型公式推导

这篇文章将尝试推导扩散模型 DDPM 中涉及公式&#xff0c;主要参考两个 B 站视频&#xff1a; 大白话AI狗中赤兔 本文所用 PPT 元素均来自 UP 主&#xff0c;狗中赤兔和大白兔AI&#xff0c;特此感谢。 在证明开始&#xff0c;我们需要先对扩散模型有一个整体的认知。扩散模型…

【心得】java从CC1链入门CC链个人笔记

来劲了&#xff0c;感觉离真正的CTF又近了一步。 本文仅从一个萌新的角度去谈&#xff0c;如有纰漏&#xff0c;纯属蒟蒻。 目录 CC链概念 CC链学习前置知识 CC1链 Version1 Version2 Version3 CC链概念 CC链 Commons Collections apache组织发布的开源库 里面主要对…