1. Pyecharts(推荐:简单易用)
from pyecharts.charts import BMap
from pyecharts import options as opts
# 百度地图可视化
map_chart = BMap(init_opts=opts.InitOpts(width="1000px", height="600px"))
map_chart.add_schema(
baidu_ak="你的百度AK", # 需申请百度地图AK
center=[116.397428, 39.90923], # 北京
zoom=11,
is_roam=True
)
# 添加点
data = [
("天安门", [116.397443, 39.909187]),
("故宫", [116.397026, 39.918058]),
("颐和园", [116.271728, 39.999939])
]
map_chart.add_coordinate("天安门", 116.397443, 39.909187)
map_chart.add(
series_name="景点",
type_="scatter",
data_pair=[("天安门", 1), ("故宫", 1), ("颐和园", 1)],
label_opts=opts.LabelOpts(is_show=False),
)
map_chart.render("baidu_map.html") # 生成html文件
2. Folium(基于Leaflet)
import folium
# 创建地图
m = folium.Map(
location=[39.90923, 116.397428], # 北京
zoom_start=12,
tiles='OpenStreetMap' # 可以换成其他瓦片
)
# 添加标记
folium.Marker(
[39.909187, 116.397443],
popup='天安门',
tooltip='点击查看详情'
).add_to(m)
# 添加圆形区域
folium.Circle(
radius=1000,
location=[39.909187, 116.397443],
color='red',
fill=True
).add_to(m)
# 保存
m.save('map.html')
3. Plotly Express(交互式地图)
import plotly.express as px
import pandas as pd
# 创建数据
df = pd.DataFrame({
'city': ['北京', '上海', '广州', '深圳'],
'lat': [39.9042, 31.2304, 23.1291, 22.5431],
'lon': [116.4074, 121.4737, 113.2644, 114.0579],
'value': [100, 80, 60, 70]
})
# 创建散点地图
fig = px.scatter_mapbox(
df,
lat='lat',
lon='lon',
size='value',
color='value',
text='city',
zoom=4,
height=600
)
fig.update_layout(
mapbox_style="open-street-map", # 或"carto-positron", "stamen-terrain"
margin={"r":0, "t":0, "l":0, "b":0}
)
fig.show()
4. 简化的完整示例(公交站点可视化)
import pandas as pd
import folium
from folium.plugins import MarkerCluster
# 模拟公交站点数据
data = {
'station': ['站点A', '站点B', '站点C', '站点D'],
'lat': [39.91, 39.92, 39.93, 39.94],
'lon': [116.40, 116.41, 116.42, 116.43],
'passengers': [100, 200, 150, 80]
}
df = pd.DataFrame(data)
# 创建地图
m = folium.Map(
location=[df['lat'].mean(), df['lon'].mean()],
zoom_start=13
)
# 添加聚类标记
marker_cluster = MarkerCluster().add_to(m)
# 添加站点
for idx, row in df.iterrows():
folium.CircleMarker(
location=[row['lat'], row['lon']],
radius=row['passengers']/20,
popup=f"{row['station']}: {row['passengers']}人",
color='blue',
fill=True
).add_to(marker_cluster)
# 添加热力图
from folium.plugins import HeatMap
heat_data = [[row['lat'], row['lon'], row['passengers']] for _, row in df.iterrows()]
HeatMap(heat_data).add_to(m)
m.save('bus_stations.html')
print("地图已保存为 bus_stations.html")
5. 获取百度地图AK的步骤
访问百度地图开放平台(https://lbsyun.baidu.com/)
注册登录 → 控制台 → 创建应用
获取AK(服务端AK或浏览器端AK)
各方案对比
| 方案 |
优点 |
缺点 |
适用场景 |
|---|
| Pyecharts |
中文友好,样式美观 |
需要百度AK |
需要百度地图风格的场景 |
| Folium |
简单易用,插件丰富 |
交互性一般 |
快速创建交互式地图 |
| Plotly |
交互性强,图表美观 |
需要学习plotly语法 |
数据分析展示 |
| Geopandas |
专业GIS功能 |
学习曲线较陡 |
地理数据分析 |
快速开始建议
如果只需要简单展示 → 用Folium
如果需要百度地图样式 → 用Pyecharts
如果需要高度交互 → 用Plotly
注意事项
地图API可能有调用限制
商业用途需要关注地图服务的授权
大量数据点建议使用聚类或热力图
需要哪个具体功能(如路径规划、地理编码、热力图等)我可以提供更详细的代码示例。