4

我有一个带有 4 列的 pandas 数据框(df),分别命名为“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 行中遗漏了一些东西,字段参数可能不正确。

4

2 回答 2

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

在此处输入图像描述

于 2020-05-01T14:15:04.567 回答
1

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

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

在此处输入图像描述

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

于 2021-01-10T13:36:41.657 回答