1

我正在创建一个散点图并希望在工具提示中显示一些信息。

以下工作完美:

import bqplot as bqp
import ipywidgets as ipw

xSc = bqp.LinearScale()
ySc = bqp.LinearScale()

tt = ipw.Label("A")
def hover_handler(self, content):
    tt.value = str(content)

s = bqp.Scatter(x=[0, 1, 2], y=[1, 2, 3], scales=dict(x=xSc, y=ySc),
                tooltip=tt)
s.on_hover(hover_handler)
bqp.Figure(marks=[s])

(没有轴和保持代码简短的东西)

将鼠标悬停在每个点上表明它content很好。

在此处输入图像描述

但是,我不想简单地显示原始内容。相反,我想以表格形式显示它(但默认值bqp.Tooltip不足以满足我的需要)。

但是,如果我将标签包装在 a 中ipw.VBox,则工具提示会变成一个很小的垂直条。添加 a min_widthandmin_height会增加工具提示的大小,但没有内容(即使tt是使用默认值创建的)。如果我单独调用以单独显示 VBox,则该版本会正常显示(即使没有定义布局),甚至在将鼠标移到点上时也会更新。

import bqplot as bqp
import ipywidgets as ipw
from IPython.display import display

xSc = bqp.LinearScale()
ySc = bqp.LinearScale()

tt = ipw.Label("A")
vb = ipw.VBox(children=[tt], layout=ipw.Layout(min_width='100px', min_height='100px'))
display(vb)
def hover_handler(self, content):
    tt.value = str(content)

s = bqp.Scatter(x=[0, 1, 2], y=[1, 2, 3], scales=dict(x=xSc, y=ySc),
                tooltip=vb)
s.on_hover(hover_handler)
bqp.Figure(marks=[s])

在此处输入图像描述

我需要做什么才能正确显示工具提示?

4

1 回答 1

0

我认为对于您正在尝试实现的目标,您最好使用Output小部件作为工具提示,然后创建您需要的小部件并使用输出小部件作为上下文管理器显示它们。

如果您想查看可以显示哪些附加信息,请尝试content在您的hover_handler函数中打印。

    import bqplot as bqp
    import ipywidgets as ipw
    from IPython.display import display, clear_output

    xSc = bqp.LinearScale()
    ySc = bqp.LinearScale()


    out = ipw.Output()

    def hover_handler(self, content):
        out.clear_output()
        with out:
            label = ipw.Label(content['data']['name'])
            display(label)

    s = bqp.Scatter(x=[0, 1, 2], y=[1, 2, 3], scales=dict(x=xSc, y=ySc),
                    tooltip=out)
    s.on_hover(hover_handler)
    bqp.Figure(marks=[s])

要显示信息表,您可能需要一个ipy.HTML可用于传递 HTML 表的小部件。我有时会为此使用 pandas,并使用 df.to_html() 方法。

于 2019-06-20T07:56:41.303 回答