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

pandas dataframe转folium地图时Vega弹窗柱状图空白问题求助

问题修复方案

核心错误点及修正逻辑如下:

  • vincent.Bar的iter_idx参数传入错误:你代码中传入的alabama_data['State During Use']在你的DataFrame中不存在对应列,且该参数要求传入字符串格式的列名作为柱状图X轴维度,你这里应该用Type列作为X轴。
  • 未指定Y轴数值列:需要显式传入columns=['Total']指定用Total列作为柱状图的高度数值。
  • Popup尺寸未显式配置:默认Popup尺寸过小会导致Vega图表被挤压无法渲染,同时Vega组件的宽高需要和vincent设置的图表尺寸匹配,不要使用百分比自适应。
  • 缺失folium导入语句:原代码未导入folium会直接运行报错。

完整可运行代码

import folium
import json
from folium import features
import vincent
from vincent import Bar
import pandas as pd

# 构造你的示例DataFrame,如果你本地已经有alabama_data可跳过这段
data = [
    ['Alabama', 'Brand', 32.318231, -86.902298, 100],
    ['Alabama', 'Generic', 32.318231, -86.902298, 200],
    ['Alabama', 'OTC', 32.318231, -86.902298, 300],
    ['Alabama', 'RX', 32.318231, -86.902298, 400],
    ['Alabama', 'Total', 32.318231, -86.902298, 500]
]
alabama_data = pd.DataFrame(data, columns=['State', 'Type', 'lat', 'lng', 'Total'])

# 修正vincent柱状图配置
bar = vincent.Bar(alabama_data, 
                  iter_idx='Type', 
                  columns=['Total'],
                  height=250, 
                  width=350)
# 可选配置:自定义轴标题让图表可读性更高
bar.axis_titles(x='类型', y='总量')
vega_data = json.loads(bar.to_json())

# 初始化地图、标记、弹窗
m = folium.Map([32.3182, -86.9023], zoom_start=7)
mk = features.Marker([32.3182, -86.9023])
# Popup宽高设置为略大于图表尺寸,避免内容裁剪
p = folium.Popup(max_width=400, width=380, height=280)
v = features.Vega(vega_data, width=350, height=250)

# 组件挂载
p.add_child(v)
mk.add_child(p)
m.add_child(mk)

m

以上代码可正常渲染,点击标记后弹窗会完整显示对应柱状图,无空白问题。

内容的提问来源于stack exchange,提问作者John Taylor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:36:03