【问题标题】:Using bqplot tooltip with a dataframe将 bqplot 工具提示与数据框一起使用
【发布时间】:2019-10-08 00:40:35
【问题描述】:

使用小部件显示来自 csv 文件/数据框的 sn-ps 并提供给 bqplot 的工具提示属性

我正在尝试使用 bqplot 显示美国每个州的某些信息(统计数据,例如年龄组、收入、肥胖水平等)。我可以使用 bqplot github 上提供的示例绘制美国地图。但工具提示构造函数使用 json 文件中的列名,该文件也用于实际显示地图。我不知道如何覆盖它,所以我决定使用一个小部件(理想情况下是一个容器小部件)来保存我想要为每个状态显示的数据,并使用 bqplot.map 中提供的 on_hover() 方法;其实我只是修改了下面链接中的代码:

Container as tooltip doesn't show contents

显示特定状态的信息


import bqplot
import pandas as pd
import ipywidgets as ipw
from IPython.display import display, clear_output

res = pd.read_csv('data_files/clean_data.csv')
df = pd.DataFrame(res)

## using values for only one state
df_temp = df[df['State'] == 'NY']

out = ipw.Output()
def hover_handler(self,Dataframe):
        out.clear_output()
        with out:

            display(ipw.HTML(df_temp.to_html()))


geo = AlbersUSA()
scale_s =  OrdinalColorScale(domain=['Obese', 'Not Obese'], colors=['Red', 'Green'])
st_green = dict(zip(df['State'], list(obesity_list)))

geo = AlbersUSA()
scale_s =  OrdinalColorScale(domain=['Obese', 'Not Obese'], colors=['Red', 'Green'])
map_args = {'color': st_green,
              'scales': {'projection': geo, 'color': scale_s}, 
              'colors': {'default_color': 'Black'}}   

s_map = plt.geo(map_data='USStatesMap', **map_args)
s_map.toolip = out  # I am pointing tooltip to the out object
s_map.on_hover(hover_handler)
s_map
  1. 我不知道如何根据“肥胖”和“不肥胖”值更改每个状态的颜色;

  2. 我使用了来自 bqplot 示例的 sn-ps 代码和上面关于 stackoverflow 的链接,但是当我将鼠标悬停到另一个状态时,我不知道如何更改信息;目前df_temp 仅保存一个状态的值,并且显示在我将鼠标悬停在地图上的任何位置。如何让小部件获取相关数据?

2.1 本质上,我需要它以表格格式显示结果:

State:NY
Status: Not Obese
Age_group | Obese | Not_obese
<18       |  %    |  %
19-30     |  %    |  %

我将上述所有字段的数据作为每个状态的数据框中的列。我是 ipywidgets 和 bqplot 的新手。因此,任何帮助将不胜感激。

谢谢!

【问题讨论】:

    标签: python dictionary tooltip ipywidgets bqplot


    【解决方案1】:

    对于第 2 点:

    在您的 hover_handler 代码中,您需要捕获传递给函数的信息,并使用它来过滤您的主数据帧 (df)。尝试将您的 hover_handler 代码更改为以下代码,并查看传递给函数的信息。然后找出如何使用这些信息将您的数据框过滤到相关状态。

        def hover_handler(map, hover_event):
                out.clear_output()
                with out:
                    print(hover_event)
    

    【讨论】:

    • 谢谢!当你说我需要捕获传递给函数的信息时——你的意思是状态 ID 或鼠标指针?我不知道该怎么做;地理功能使用“USStatesMap”数据绘制地图并显示信息。这是一个 json 文件。如果我可以动态(即在悬停时)捕获状态 ID,我可以过滤我的 df /dict 并显示正确的信息。对此有何建议?
    • 我稍微修改了我的代码。它不应该涉及您更改 geo 函数。当您设置s_map.on_hover(hover_handler) 时,地图和悬停事件将传递给hover_handler 函数。 hover_event dict 将告诉您您将鼠标悬停在哪个项目上。使用此信息解析您的输入数据并在“输出”小部件中显示您想要的数据框/图表。
    • 谢谢!这帮助很大。我稍微清理了代码。但是,我不确定我是否为 hover_event 使用了正确的属性:
    • 抱歉,我似乎无法在评论部分获得正确的格式。我使用了 hover_highlight 属性,它是布尔值,默认值为 True,所以没有太大帮助。
    • 我想通了! bqplot 使用自己的嵌套字典在指针悬停时获取数据。它没有我可以访问以过滤我的数据集的属性(或我没有找到)。谢谢您的意见!它将帮助我完成未来的项目!
    猜你喜欢
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多