基于经纬度分布的python热力图绘制
时间: 2025-07-20 07:30:58 浏览: 1
<think>我们根据用户的问题,需要绘制基于经纬度数据的热力图。根据引用,有多种方法可以实现,包括使用folium、pyecharts等库。
用户明确要求使用经纬度数据,因此我们需要一个能够处理地理坐标并绘制热力图的工具。
根据引用[4],folium是一个很好的选择,因为它可以轻松地创建地图并添加热力图层。同时,引用[2]提到了pyecharts,但用户问题中并没有指定具体使用哪个库,因此我们可以提供两种方法,但考虑到用户问题中引用的示例代码主要是folium,我们以folium为例进行说明。
步骤:
1. 准备数据:需要包含经纬度的数据,通常是一个列表,每个元素是[纬度, 经度]的子列表。
2. 创建基础地图:使用folium.Map设置初始位置和缩放级别。
3. 添加热力图层:使用folium.plugins.HeatMap将数据添加到地图上。
4. 保存为HTML文件。
另外,引用[3]提到了一种方法,即创建一个背景图,但这里我们使用folium可以更简单。
注意:经纬度的顺序在folium中是[纬度, 经度],而通常我们得到的数据可能是经度在前,纬度在后,需要注意调整。
我们将按照以下步骤编写代码示例:
1. 导入必要的库:folium, pandas(用于读取数据)
2. 读取数据:假设数据在CSV或Excel文件中,包含经度和纬度列。
3. 准备热力图数据:将数据转换为[[lat1, lon1], [lat2, lon2], ...]的形式。
4. 创建地图对象。
5. 创建热力图并添加到地图。
6. 保存为HTML文件。
同时,我们也可以提供使用pyecharts的示例,但根据引用[2],pyecharts需要指定坐标系,且百度地图使用的是BD-09坐标系,而通常我们的经纬度数据是WGS84(GPS标准)或GCJ-02(火星坐标系)。因此,如果数据不是BD-09,可能需要转换。但为了简单,我们先以WGS84为例(即直接使用经纬度)。
考虑到用户可能希望直接运行,我们以folium为例,因为其简单且直接。
但是,用户引用的内容中也有使用自定义背景图的情况(引用[3]),但我们不采用那种方法,因为folium更简单。
因此,我们提供两种方法:
方法一:使用folium(简单,直接生成交互式地图)
方法二:使用pyecharts(同样可以生成交互式地图,但可能需要考虑坐标系)
由于用户没有指定,我们以folium为主,同时简要提及pyecharts。
另外,引用[1]和引用[3]提到了绘制热力图的一般步骤,但未涉及具体代码,因此我们主要参考引用[4]的代码。
下面我们分别给出两种方法的示例代码。
注意:在编写代码前,确保已安装必要的库。
对于folium: pip install folium
对于pyecharts: pip install pyecharts
方法一:使用folium</think>### 使用Python根据经纬度数据绘制热力图
以下是使用Python绘制基于经纬度热力图的详细步骤,主要使用`folium`库实现:
#### 方法一:使用folium(推荐)
```python
import pandas as pd
import folium
from folium.plugins import HeatMap
# 1. 准备数据(示例数据)
data = {
'latitude': [39.90, 31.23, 30.25, 39.90, 31.23, 30.25],
'longitude': [116.40, 121.47, 120.16, 116.41, 121.48, 120.17],
'value': [50, 30, 70, 45, 80, 20]
}
df = pd.DataFrame(data)
# 2. 创建热力图数据点(格式:[纬度, 经度, 强度值])
heat_data = [[row['latitude'], row['longitude'], row['value']] for _, row in df.iterrows()]
# 3. 创建基础地图(以中国中心为例)
m = folium.Map(
location=[35.0, 105.0], # 地图初始中心点
zoom_start=4, # 初始缩放级别
tiles='https://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7',
attr='高德地图'
)
# 4. 添加热力图层
HeatMap(
heat_data,
radius=15, # 热力点半径
blur=10, # 模糊度
max_zoom=13, # 最大缩放级别
gradient={0.4: 'blue', 0.65: 'lime', 1: 'red'} # 颜色梯度
).add_to(m)
# 5. 保存为HTML文件
m.save('heatmap.html')
```
#### 方法二:使用pyecharts(备选)
```python
from pyecharts import options as opts
from pyecharts.charts import Geo
import pandas as pd
# 准备数据(同上)
df = pd.DataFrame(...)
# 创建地理坐标系热力图
geo = (
Geo(init_opts=opts.InitOpts(width="1200px", height="800px"))
.add_schema(maptype="china")
.add(
"热力强度",
[list(z) for z in zip(df['longitude'], df['latitude'], df['value'])],
type_="heatmap",
label_opts=opts.LabelOpts(is_show=False)
)
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(
min_=0,
max_=100,
is_calculable=True,
range_color=["blue", "cyan", "lime", "yellow", "red"]
)
)
)
# 生成HTML文件
geo.render("heatmap_pyecharts.html")
```
### 关键步骤说明
1. **数据准备**:
- 需要包含`纬度`、`经度`和`强度值`的三列数据
- 格式要求:`[[lat, lon, value], ...]`
2. **地图参数**:
- `tiles`:可替换为`'OpenStreetMap'`(默认)或高德/百度地图URL
- `zoom_start`:初始缩放级别(1-18)
3. **热力参数**:
- `radius`:每个热力点的半径(像素)
- `blur`:边缘模糊度(值越大过渡越平滑)
- `gradient`:自定义颜色梯度映射
4. **输出结果**:
- 生成交互式HTML文件,可在浏览器中缩放查看
- 支持鼠标悬停查看坐标位置
> 注意:如果使用百度/高德地图,需遵守相应API使用政策[^2]。对于大规模数据(>10万点),建议先进行地理网格聚合以提高性能[^3]。
### 示例效果

(实际效果为可交互地图,支持缩放和区域筛选)
阅读全文
相关推荐

















