【问题标题】:pandas dataframe to folium with vega chart popuppandas dataframe to folium with vega chart popup
【发布时间】:2021-12-25 18:50:15
【问题描述】:

使用此数据框:

State   Type    lat         lng         Total
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

最新版本的大约 8 种不同尝试将上述数据显示在地图上标记弹出窗口内的条形图中:

import json
from folium import features
import vincent
from vincent import Bar

bar = vincent.Bar(alabama_data, iter_idx=alabama_data['State During Use'], height=100, width=200)
data = json.loads(bar.to_json())

m = folium.Map([0, 0], zoom_start=1)
mk = features.Marker([0, 0])
p = folium.Popup("Hello")
v = features.Vega(data, width="100%", height="100%")

mk.add_child(p)
p.add_child(v)
m.add_child(mk)

m

但是,此代码正确地呈现地图标记。但是,每张图片的弹出窗口都是一个空白的白色矩形:

所以,这并不理想。我在网站和 youtube 上浏览了大约 20 个左右的教程,并查阅了 folium、Vega 和 vega lite 的文档,但在那里找不到有关此问题的指导。我知道这可能是一个晦涩难懂的问题,但我指望互联网能培养出在这里同一个葡萄园辛勤工作的人。非常感谢您抽出宝贵时间查看此内容。

【问题讨论】:

    标签: python pandas folium vega


    【解决方案1】:

    我不熟悉使用“vincent”库,所以我不确定这是否是最佳答案。在您提供的数据中,我没有看到名为“使用期间的状态”的列,因此我决定仅使用总计列。没有经纬度信息,所以我使用了您提供的数据中的经纬度信息。

    import pandas as pd
    import numpy as np
    import io
    
    data = '''
    State   Type    lat         lng         Total
    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.read_csv(io.StringIO(data), delim_whitespace=True)
    
    alabama_data.set_index('Type', inplace=True)
    
    alabama_data
        State   lat     lng     Total
    Type                
    Brand   Alabama     32.318231   -86.902298  100
    Generic     Alabama     32.318231   -86.902298  200
    OTC     Alabama     32.318231   -86.902298  300
    RX  Alabama     32.318231   -86.902298  400
    Total   Alabama     32.318231   -86.902298  500
    
    import json
    import folium
    from folium import features
    import vincent
    from vincent import Bar
    
    bar = vincent.Bar(alabama_data['Total'], height=100, width=200)
    data = json.loads(bar.to_json())
    
    m = folium.Map([32.318231, -86.902298], zoom_start=12)
    mk = features.Marker([32.318231, -86.902298])
    p = folium.Popup("Hello")
    v = features.Vega(data, width="100%", height="100%")
    
    mk.add_child(p)
    p.add_child(v)
    m.add_child(mk)
    
    m
    

    【讨论】:

    • 感谢您查看此内容。我复制了您的代码并显示了图表,但没有显示 x 轴标签。使用您的代码,我的 x 轴只有 0、1、2、3、4 等。您是如何让“类型”列值成为 x 轴的?
    • 抱歉,我忘了复制索引类型列的代码。我已经发布了我检查过的完整代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-01
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 2022-12-27
    相关资源
    最近更新 更多