如何使用bqplot在散点图中插入工具提示

2024-06-25 23:06:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框(df),它有4列,分别命名为“姓名”、“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将显示在工具提示中。我想我可以用图书馆做到这一点

我编写了以下代码:

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行中缺少一些内容,字段参数可能不正确


Tags: 工具namefromimportdfdatadefas
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

enter image description here

但它不支持丰富的格式。甚至不换行:(

使用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

enter image description here

相关问题 更多 >