大家好,我是安夏学姐!今天要和大家分享一个特别好用的Python库 - Folium。它是一个基于Python的数据可视化库,可以帮助我们轻松创建漂亮的交互式地图。不管是展示地理数据、标记位置,还是绘制热力图,Folium都能帮我们轻松搞定!
## 初识Folium
我们需要安装Folium。打开终端输入以下命令即可:
```python
pip install folium
安装完成后,让我们来创建第一个简单的地图:
import folium
# 创建一个地图对象,设置中心点为北京
my_map = folium.Map(location=[39.9042, 116.4074], zoom_start=12)
# 保存地图
my_map.save('my_first_map.html')
运行这段代码,你会在当前目录下得到一个HTML文件。打开它,就能看到一个以北京为中心的交互式地图啦!
地图有了,接下来我们来添加一些标记:
import folium
# 创建地图
my_map = folium.Map(location=[39.9042, 116.4074], zoom_start=12)
# 添加标记
folium.Marker(
location=[39.9042, 116.4074],
popup='天安门',
icon=folium.Icon(color='red', icon='info-sign')
).add_to(my_map)
# 保存地图
my_map.save('beijing_landmarks.html')
小贴士:folium.Icon() 支持多种颜色和图标样式,你可以根据需要自定义标记的外观!
如果我们有一些带权重的地理位置数据,可以用热力图来展示:
import folium
from folium import plugins
# 创建地图
my_map = folium.Map(location=[39.9042, 116.4074], zoom_start=12)
# 准备热力图数据
data = [
[39.9042, 116.4074, 0.8], # 纬度、经度、权重
[39.9142, 116.4174, 0.3],
[39.9242, 116.4274, 0.5]
]
# 添加热力图层
plugins.HeatMap(data).add_to(my_map)
# 保存地图
my_map.save('heatmap.html')
当我们需要在同一张地图上展示多种数据时,可以使用图层控制:
import folium
from folium.plugins import GroupedLayerControl
# 创建地图
my_map = folium.Map(location=[39.9042, 116.4074], zoom_start=12)
# 创建特征组
fg1 = folium.FeatureGroup(name='景点')
fg2 = folium.FeatureGroup(name='餐厅')
# 向不同组添加标记
folium.Marker([39.9042, 116.4074], popup='天安门').add_to(fg1)
folium.Marker([39.9142, 116.4174], popup='某家餐厅').add_to(fg2)
# 将特征组添加到地图
fg1.add_to(my_map)
fg2.add_to(my_map)
# 添加图层控制
folium.LayerControl().add_to(my_map)
# 保存地图
my_map.save('layered_map.html')
- 设置地图样式 :除了默认的OpenStreetMap,Folium还支持多种地图样式:
folium.Map(tiles='Stamen Terrain') # 地形图
folium.Map(tiles='Stamen Toner') # 黑白风格
- 自定义弹出框
popup_content = “”“
<h4>天安门</h4>
<p>著名的旅游景点</p>
”“”
folium.Marker(location=[39.9042, 116.4074], popup=popup_content).add_to(my_map)
- 保存地图注意事项
尝试创建一个展示你所在城市主要景点的交互式地图,包含以下要素:
小伙伴们,今天的Python学习之旅就到这里啦!记得动手敲代码,有问题随时在评论区问安夏学姐我哦。Folium真的是一个特别有趣的库,你可以用它创造出各种漂亮的地图可视化作品。祝大家学习愉快,Python学习节节高!
Would you like me to explain or break down any part of this code?