0

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

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

作为工具提示的容器不显示内容

显示特定状态的信息


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 示例中的代码片段和上面关于 stackoverflow 的链接,但是当我将鼠标悬停到另一个状态时,我不知道如何更改信息;当前df_temp仅保存一个状态的值,并且显示在我将鼠标悬停在地图上的任何位置。如何让小部件获取相关数据?

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

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

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

谢谢!

4

1 回答 1

1

对于第 2 点:

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

    def hover_handler(map, hover_event):
            out.clear_output()
            with out:
                print(hover_event)
于 2019-10-08T08:57:51.483 回答