我有一个pandas dataframe (df),有4列,名为' name ','nb','a‘和'b',描述一个人的特征,包括他的名字,他的id号('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行中遗漏了一些东西,字段参数可能不正确。
发布于 2020-05-01 22:15:05
使用bqplot工具提示,您只能引用实际Mark中的字段。所以像这样的东西应该是有效的:
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

发布于 2021-01-10 21:36:42
您还可以在dataframe中创建新列,将其用作名称并在工具提示中显示该名称:
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

但它不支持丰富的格式化。甚至连换行符都没有:(
https://stackoverflow.com/questions/61541657
复制相似问题