【问题标题】:How to insert tooltips in a scatter plot with bqplot如何使用 bqplot 在散点图中插入工具提示
【发布时间】:2020-05-01 11:31:16
【问题描述】:

我有一个 pandas 数据框 (df),它有 4 列,分别命名为“name”、“nb”、“a”和“b”,用他的名字、身份证号 (“nb”) 和一些与之相关的值('a' 和 'b')。

import pandas as pd
data = {
    "name": ["Thomas", "John", "Anna", "Ben", "Arlette"],
    'nb': [1,2,3,4,5],
    "a": [0, 2, 13, 43, 90],
    "b": [4, 24, 31, 2, 3],
}
df = pd.DataFrame(data)

我想创建一个带有“a”和“b”值的散点图,其中名称和 id 将出现在工具提示中。我想我可以用 bqplot 库做到这一点。

我写了以下代码:

from bqplot import pyplot as plt
from bqplot import Tooltip
from bqplot import Scatter

fig = plt.figure(title='My title')

def_tt = Tooltip(fields=['name','nb'], formats = ['','.2f'], labels = ['Name','Nb'],show_labels = True )

chart = plt.scatter(df["a"],df["b"], colors = ['red'], tooltip = def_tt, stroke = 'red', unhovered_style ={'opacity':0.5})
fig

但工具提示是空的,尽管标签出现了。我想我在 def_tt 行中遗漏了一些东西,字段参数可能不正确。

【问题讨论】:

    标签: python pandas tooltip scatter bqplot


    【解决方案1】:

    使用 bqplot 工具提示,您只能引用实际标记中的字段。所以这样的事情应该可以工作:

    def_tt = Tooltip(fields=['index', 'x', 'y'], formats = ['','.2f'],)
    

    如果你想从你的数据框中选择一个不同的字段,那么你需要

    1) 创建一个输出小部件

    2) 定义当您将鼠标悬停在标记上时要运行的函数

    3) 将该输出小部件设置为标记工具提示

    4) 设置该函数以在悬停时在输出小部件中显示您的元数据 标记。

    from bqplot import pyplot as plt
    from bqplot import Tooltip
    from bqplot import Scatter
    from ipywidgets import Output
    
    fig = plt.figure(title='My title')
    out = Output(). # 1
    
    def def_tt(_, event):  # 2
        out.clear_output()
        with out:
            print(df.loc[event['data']['index'], 'name'])
    
    chart = plt.scatter(
        df["a"], df["b"], colors = ['red'], 
        tooltip = out, # 3
        stroke = 'red', unhovered_style ={'opacity':0.5}
    )
    chart.on_hover(def_tt) # 4
    fig
    

    【讨论】:

    • 谢谢!比我想象的要复杂,但无论如何都很好。我可以通过在函数 def_tt 中写入 ['name','id'] 在工具提示中添加第二行。
    【解决方案2】:

    您还可以在数据框中创建一个新列,将其用作名称并在工具提示中显示该名称:

    fig = plt.figure()
    
    def_tt = Tooltip(fields=['name'], show_labels=False)
    
    df['labels'] = df.apply(lambda row: f'X: {row.x:%Y-%m-%d}, Y: {row.y:.2f}, Other Info: {row.custom_field}', axis=1)
    
    scatt = plt.scatter(df.x, df.y, tooltip=def_tt,
                        # specify labels, but hide by default
                        names=df.labels, display_names=False)
    fig
    

    但它不支持富格式。甚至没有换行符:(

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      相关资源
      最近更新 更多