【发布时间】:2020-04-09 07:11:00
【问题描述】:
我想使用散景创建具有这些函数的分类散点图:
悬停工具提示
情节区域外的图例,点击策略=“隐藏”
经过多次搜索,我可以分别实现功能#1和#2。
但我不知道如何让这两个功能同时工作。
工具提示只需要一个字形对象,但绘图区域外的图例需要一个 for 循环来创建用于生成 legend_items 的字形对象列表。 p>
谢谢。
代码示例:
- 悬停工具提示可以通过使用 ColumnDataSources 来实现 (https://docs.bokeh.org/en/latest/docs/user_guide/categorical.html#heat-maps)
import pandas as pd
from bokeh.sampledata.stocks import AAPL
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure, output_file, show
df = pd.DataFrame(AAPL)
output_file("test.html")
p = figure(tools="hover")
source = ColumnDataSource(df)
p.scatter("high", "low", source=source)
p.hover.tooltips = [("Date","@date")]
show(p)
import pandas as pd
from bokeh.models import Legend, LegendItem
from bokeh.palettes import Spectral4
from bokeh.plotting import figure, output_file, show
from bokeh.sampledata.stocks import AAPL, GOOG, IBM, MSFT
output_file("test2.html")
p = figure(x_axis_type="datetime")
p_list = []
for data, name, color in zip([AAPL, IBM, MSFT, GOOG], ["AAPL", "IBM", "MSFT", "GOOG"], Spectral4):
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])
p_list.append(p.line(df['date'], df['close'], line_width=2, color=color, alpha=0.8))
legend_items = [LegendItem(label=x, renderers=[p_list[i]]) for i, x in enumerate(["AAPL", "IBM", "MSFT", "GOOG"])]
legend_ = Legend(items=legend_items, click_policy="hide", location="center", label_text_font_size="12px")
p.add_layout(legend_, "right")
show(p)
【问题讨论】:
-
您可以将工具添加为实例而不是字符串。
HoverTool接受renderers和LegendItem一样。 -
话虽如此,我仍然不明白为什么不能只将悬停工具添加到第二个示例中。只需在对
figure的调用中指定tools='hover'。 -
@EugenePakhomov 感谢您的评论。我不确定工具提示是否可以在不调用 ColumnDataSource 的情况下映射到数据框。我想显示与同一行中的数据相关的特定列。添加
tools='hover'只是给了我 x、y 和索引的工具提示。 -
啊,我明白你的意思了。是的,您必须使用
ColumnDataSource才能使用数据列。让我试着举个例子。