You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Folium气泡地图内显示数值?支持Seaborn静态方案

解决方案

一、Folium交互式气泡地图(添加数值标签)

Folium的Circle组件本身不支持直接在气泡内部添加文字,我们可以通过**叠加Marker组件+自定义DivIcon**的方式实现数值显示。修改后的完整代码如下:

import folium
import pandas as pd

# 创建基础地图
m = folium.Map(location=[20, 0], tiles="OpenStreetMap", zoom_start=2)

# 准备数据
data = pd.DataFrame({
    'lon': [-58, 2, 145, 30.32, -4.03, -73.57, 36.82, -38.5],
    'lat': [-34, 49, -38, 59.93, 5.33, 45.52, -1.29, -12.97],
    'name': ['Buenos Aires', 'Paris', 'melbourne', 'St Petersbourg', 'Abidjan', 'Montreal', 'Nairobi', 'Salvador'],
    'value': [10, 12, 40, 70, 23, 43, 100, 43]
})

for idx, row in data.iterrows():
    # 添加气泡圆
    folium.Circle(
        location=[row['lat'], row['lon']],
        popup=f"{row['name']}: {row['value']}",  # 优化弹窗,同时显示名称和数值
        radius=float(row['value']) * 20000,
        color='crimson',
        fill=True,
        fill_color='crimson',
        fill_opacity=0.7  # 调整透明度,避免遮挡文字标签
    ).add_to(m)
    
    # 添加气泡中心的数值标签
    folium.Marker(
        location=[row['lat'], row['lon']],
        icon=folium.DivIcon(
            html=f'<div style="font-size: 14px; font-weight: bold; color: white; text-align: center;">{row["value"]}</div>'
        )
    ).add_to(m)

# 保存地图
m.save('bubble_folium_with_value.html')

关键修改说明

  • 用data.iterrows()替代索引循环,代码更简洁易读
  • 优化弹窗内容,同时展示城市名称和电池容量数值
  • 调整气泡透明度,让中心数值标签更清晰
  • 通过DivIcon自定义HTML样式的文字标签,字体颜色、大小可按需调整

二、Seaborn静态气泡图方案

如果需要静态图片,可使用Seaborn结合Matplotlib实现,直接在气泡旁标注数值:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# 准备数据
data = pd.DataFrame({
    'lon': [-58, 2, 145, 30.32, -4.03, -73.57, 36.82, -38.5],
    'lat': [-34, 49, -38, 59.93, 5.33, 45.52, -1.29, -12.97],
    'name': ['Buenos Aires', 'Paris', 'melbourne', 'St Petersbourg', 'Abidjan', 'Montreal', 'Nairobi', 'Salvador'],
    'value': [10, 12, 40, 70, 23, 43, 100, 43]
})

# 设置绘图风格
sns.set_style("whitegrid")
plt.figure(figsize=(12, 8))

# 绘制气泡图
scatter = sns.scatterplot(
    data=data,
    x='lon',
    y='lat',
    size='value',
    sizes=(200, 2000),  # 控制气泡大小范围,避免数值差距过大导致尺寸失衡
    color='crimson',
    alpha=0.7
)

# 为每个气泡标注数值
for idx, row in data.iterrows():
    plt.annotate(
        f"{row['value']}",
        (row['lon'], row['lat']),
        textcoords="offset points",
        xytext=(0, 10),  # 调整标签偏移量,避免遮挡气泡
        ha='center',
        fontweight='bold'
    )

# 设置坐标轴标签和标题
plt.xlabel('经度')
plt.ylabel('纬度')
plt.title('全球城市电池存储容量气泡图')
plt.legend(title='电池容量', bbox_to_anchor=(1.05, 1), loc='upper left')

# 保存并显示图片
plt.tight_layout()
plt.savefig('bubble_seaborn.png', dpi=300)
plt.show()

方案说明

  • 通过sizes参数控制气泡大小范围,避免极端数值导致的视觉失衡
  • 用plt.annotate在气泡上方标注数值,位置可通过偏移量灵活调整
  • 生成的静态图片可直接用于报告、文档等场景

内容的提问来源于stack exchange,提问作者Zeryab Hassan Kiani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 10:52:40