python地理热力图
时间: 2023-11-16 21:00:25 浏览: 143
Python可以使用多种库来制作地理热力图,其中比较常用的是folium和geopandas。folium是一个基于leaflet.js的Python库,可以用来制作交互式地图,而geopandas则是一个用于地理空间数据处理的Python库。下面是使用folium库制作地理热力图的步骤:
1. 安装folium库:在命令行中输入pip install folium进行安装。
2. 导入所需库:import folium和import pandas。
3. 读取数据:使用pandas库中的read_csv函数读取数据。
4. 创建地图:使用folium库中的Map函数创建地图。
5. 添加热力图层:使用folium库中的HeatMap函数添加热力图层。
6. 显示地图:使用folium库中的save函数或者在Jupyter Notebook中直接显示地图。
下面是一个使用folium库制作地理热力图的示例代码:
```python
import folium
import pandas as pd
# 读取数据
data = pd.read_csv('data.csv')
# 创建地图
m = folium.Map(location=[39.9042, 116.4074], zoom_start=11)
# 添加热力图层
heat_data = [[row['lat'], row['lng']] for index, row in data.iterrows()]
HeatMap(heat_data).add_to(m)
# 显示地图
m
```
相关问题
python 地图热力图
### 如何用Python生成地图热力图
#### 使用的库推荐
为了生成地图热力图,通常会结合多个库完成任务。以下是几个常用库及其功能说明:
- **Matplotlib**: 提供基础绘图能力,适合简单的可视化需求[^2]。
- **Seaborn**: 构建于 Matplotlib 之上,提供了更高级别的 API 来简化复杂图表的绘制过程。
- **Folium**: 是一个用于地理可视化的 Python 库,支持将数据叠加到交互式的 Leaflet 地图上[^1]。
- **Baidu Map API (百度地图 API)**: 如果需要更高精度的地图服务以及热力图效果,可以借助百度地图提供的 API 功能[^4]。
对于初学者来说,如果只是想快速实现热力图的效果而不涉及复杂的地理位置转换操作,则可以直接利用 Folium 或者 Seaborn 完成基本的任务;但如果涉及到具体的城市名称转为经纬度坐标或者更加精细的操作,则可能需要用到 Baidu Map API 的帮助[^3]。
#### 示例代码
下面分别给出基于不同工具集的例子代码片段。
##### 方法一:使用 `Folium` 创建简单热力图
此方法适用于已经拥有经纬度坐标的场景下直接渲染热度分布情况。
```python
import folium
from folium.plugins import HeatMap
# 数据准备 - 假设有如下形式的数据列表 [(纬度,经度,权重)]
data = [
[39.9042, 116.4074, 5],
[31.2304, 121.4737, 8],
[23.1291, 113.2644, 10]
]
# 初始化地图中心位置为中国某一点
map_osm = folium.Map(location=[39.9042, 116.4074], zoom_start=5)
# 添加热力层至地图对象中
HeatMap(data).add_to(map_osm)
# 将最终结果保存为HTML文件以便查看
file_path = "./heatmap.html"
map_osm.save(file_path)
print(f"File saved to {file_path}")
```
##### 方法二:通过调用百度地图API构建高精度过滤后的热力图
当仅有地址字符串而无确切GPS数值时可采用这种方式先获取对应点位再进一步处理。
注意,在实际应用前需前往官网申请个人密钥并替换掉模板中的占位符部分。
```python
import requests
import json
from pyecharts.charts import Geo
from pyecharts import options as opts
def get_lng_lat(address):
url = 'http://api.map.baidu.com/geocoding/v3/'
params = {
'address': address,
'output': 'json',
'ak': '<Your_BD_API_KEY>' # 替换为自己注册得到的应用程序秘钥
}
res = requests.get(url,params=params)
if not res.status_code==200:
raise Exception('Failed fetching location info.')
result=json.loads(res.text)
lng=result['result']['location']['lng']
lat=result['result']['location']['lat']
return {'lng':lng,'lat':lat}
locations=['北京市','上海市','广州市'] # 测试地点集合
points=[] # 存储解析出来的经纬度信息
for loc in locations:
point=get_lng_lat(loc)
points.append([point['lat'],point['lng']])
geo=(
Geo()
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(max_=max_weight,min_=min_weight),
title_opts=opts.TitleOpts(title="Example of City Heatmap"),
legend_opts=opts.LegendOpts(is_show=False))
.add_schema(maptype='china')
.add("",[(str(p),w) for p,w in zip(points,[random.randint(1,10)*i/len(locations)])])
.render_notebook() # 可视化预览(Jupyter Notebook环境下有效)
)
```
以上两种方式各有优劣,前者部署容易但灵活性较低;后者虽然前期准备工作较多却能带来更好的用户体验与更高的精确程度。
---
python地图热力图
### 使用 Python 创建地图热力图
为了创建地图热力图,通常会使用 `folium` 和 `pandas` 库来处理地理数据并可视化。下面是一个完整的示例代码,展示如何基于经纬度数据生成热力图。
#### 安装所需库
首先需要安装必要的依赖包:
```bash
pip install folium pandas geopandas branca
```
#### 导入所需的模块
导入用于绘图和数据分析的库:
```python
import folium
from folium.plugins import HeatMap
import pandas as pd
```
#### 准备样本数据集
准备一些模拟的数据作为例子,实际应用中应替换为真实坐标点集合:
```python
data = [
[39.9042, 116.4074], # 北京市
[31.2304, 121.4737], # 上海市
[23.1291, 113.2644], # 广州市
]
df = pd.DataFrame(data, columns=['lat', 'lon'])
locations = df[['lat', 'lon']].values.tolist()
```
#### 初始化 Folium 地图对象
设置中心位置以及缩放级别:
```python
map_center = [35.8617, 104.1954] # 设置中国为中心的地图视图
m = folium.Map(location=map_center, zoom_start=5)
```
#### 添加热力层到地图上
通过插件将热度信息渲染至地图表面:
```python
HeatMap(locations).add_to(m)
# 将 HTML 文件保存下来以便查看效果
m.save('heatmap.html')
```
上述过程展示了利用 Python 中的 `folium` 及其扩展组件构建简单版地理位置分布密度图表的方法[^1]。
阅读全文
相关推荐













