散景悬停工具和工具提示无法正常工作

问题描述 投票:0回答:1

嗨,我刚刚得到了我想要的情节,并使用

bokeh
进行了一些帮助和调整;但是,我不知道如何将感兴趣的信息添加到我的工具提示导航/悬停工具中。

具体来说,这是我的

df
的样子:

with

ID
as df.index,这是我在悬停时(以及其他)想要显示的确切信息,因为它有助于理解我们正在查看的样本。

也就是说,这是我与相关库/包一起使用的代码:

import numpy as np
import pandas as pd
import plotly.express as px
import bokeh.plotting as bp

from bokeh.models import CategoricalColorMapper, Legend, HoverTool
from bokeh.plotting im


TOOLS="hover,crosshair,pan,wheel_zoom,zoom_in,zoom_out,box_zoom,undo,redo,reset,tap,save,box_select,poly_select,lasso_select,examine,help"

df = pd.DataFrame({
    'name': df.index,
    'UMAP1': df['UMAP1'],
    'UMAP2': df['UMAP2'],
    'population': df['population'],
    'color': df['color'],
})

#individual_id = bp.ColumnDataSource(df)
#hover_name = HoverTool(
    #tooltips=[('ID', '@name')])

fig = figure(tools=TOOLS, x_axis_label='UMAP1', y_axis_label='UMAP2')
legend = Legend(orientation='horizontal', title='metapopulations')
fig.add_layout(legend, 'below')
#fig.add_tools(hover_name)


grouper = df.groupby('population')
for label, g in grouper:
    fig.scatter(g['UMAP1'], g['UMAP2'], color=g['color'], legend_label=label, fill_alpha=0.6)

#hover = fig.select(dict(type=HoverTool))
#hover.tooltips = [('Name', '@name')]

show(fig)

正如你所看到的,我尝试了一些选项,但所有选项都返回了

???
而不是样本的 ID...而且,由于某种原因,在这个特定的上下文中,
ColumnDataSource
在使用时会返回错误。如果有人知道如何将样本 ID 链接到 UMAP 中的数据点,我们将不胜感激。谢谢!

hover tooltip bokeh scatter-plot runumap
1个回答
0
投票

我采用您上一个问题中的示例,使其适应您的新要求。

在此示例中,初始 DataFrame 由名为“name”的列扩展。正如 bigreddot 在评论中提到的,您必须以某种方式将 HoverTool 的信息传递给图形的源。在旧的示例中,绘图直接从 DataFrame 的列中获取数据,并且没有获取其他数据。这次,我将每组的 DataFrame 传输到 ColumnDataSource,并仅使用列的名称来寻址来自源的数据。这样做我可以传递其他列,例如“名称”。

在显示绘图之前,我向图中添加了一个 HoverTool,其中包含我在循环组时收集的所有渲染器的集合。

import pandas as pd
from bokeh.plotting import show, figure, output_notebook
from bokeh.models import ColumnDataSource, Legend, HoverTool
output_notebook()

df = pd.DataFrame({
    'name': ['foo', 'bar', 'bla']*2,
    'UMAP1': [1,2,3,4,5,6],
    'UMAP2': [1,2,3,4,5,6],
    'population':['EUR', 'SIB', 'AME']*2,
    'color':['#1e90ff', '#bdb76b', '#eeaeee']*2,
})

p = figure()
legend = Legend(orientation='horizontal')
p.add_layout(legend, 'below')

grouper = df.groupby('population')
circles = []
for label, g in grouper:
    source = ColumnDataSource(g)
    c = p.scatter('UMAP1', 'UMAP2', color='color', legend_label=label, source=source)
    circles.append(c)

hover = HoverTool(tooltips = [('Name', '@name')], renderers=circles)
p.add_tools(hover)
show(p)

© www.soinside.com 2019 - 2024. All rights reserved.