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
相关产品推荐
相关产品推荐

