python - 散景 - 如果工具提示缺少值,则不显示
问题描述
我正在研究显示集群活动的散景图。当用户将鼠标悬停在特定处理器上时,我希望它显示有关处理器的统计信息。继承人的代码:
TOOLTIPS = [
("Usage", "@{usage}%"),
("Name", "@name"),
("PID", "@pid"),
("Command", "@command"),
("User", "@user"),
]
p = figure(title="Cluster Activity",
plot_width=1200,
plot_height=700,
x_range=nodes,
y_range=list(reversed(cores)),
tools='hover',
toolbar_location=None,
tooltips=TOOLTIPS
)
这可行,但我不想显示值为 None 的工具提示。例如,如果特定处理器的 User 值为 None,则工具提示不应包含 user 值,而不是显示“User : ???”。
有没有办法做到这一点?我似乎在教程中找不到类似的东西。我想避免编写自定义 JS。
解决方案
HoverTool
您还可以使用附加到(Bokeh 1.1.0)的 JS 回调动态创建工具提示
from bokeh.plotting import figure, show
from bokeh.models import ColumnDataSource, HoverTool, CustomJS, FactorRange
pid = [1, 2, 3, 4, 5, 6]
user = ['user1', 'user2', 'user3', 'user4', None, 'user6']
name = ['name', 'name2', 'name3', 'name4', 'name5', 'name6']
source = ColumnDataSource(data = dict(pid = pid, user = user, name = name))
p = figure(x_range = FactorRange(*name), sizing_mode = 'stretch_both', title = "Test", toolbar_location = None, tools = "")
p.vbar(x = 'name', top = 'pid', width = 0.2, source = source)
code = ''' hover.tooltips = [["Name", "@name"], ["PID", "@pid"]];
if (cb_data.index.indices.length > 0) {
index = cb_data.index.indices[0];
counts = source.data.user[index]
if (counts != null)
hover.tooltips = [["Name", "@name"], ["User", "@user"], ["PID", "@pid"]];
} '''
hover = HoverTool()
hover.callback = CustomJS(args = dict(source = source, hover = hover), code = code)
p.add_tools(hover)
show(p)
由于下面的评论,我检查了 Bokeh v2.1.1 的代码,在将回调修改为:
code = ''' if (cb_data.index.indices.length > 0) {
const index = cb_data.index.indices[0];
const counts = source.data.user[index]
if (counts != null) {
hover.tooltips = [["Name", "@name"], ["User", "@user"], ["PID", "@pid"]];
}
else {
hover.tooltips = [["Name", "@name"], ["PID", "@pid"]];
}
} '''
结果:
推荐阅读
- c++ - vscode 无法识别扩展名 .cpp.in
- android - 我可以在 Android 手机上运行 IOS 应用程序吗?
- flutter - 如何使用合并语义将 Cupertino 添加到 appbar
- c# - 继承 IdentityUser 和 IdentityDbContext 时脚手架不起作用 - Wep Api
- javascript - 使用 Discord.js 向频道发送消息时遇到问题
- holoviews - 为什么我的 HoloViews DynamicMap 不会响应参数值的更改而更新?
- javascript - 在加载时获取数据(NodeJS、JS、导出)
- python - 为什么使用类时 Tkinter bind() 会返回错误?
- git - 使用 Github Actions 推送到个人 VPS
- android - 短时间后音频播放在 Android 上停止,但在 IOS 上完全播放