python - 如何在绘图框外绘制 LabelSet?
问题描述
我试图通过在 yaxis 上绘制时间序列图的值来突出显示时间序列图的最后一个值,如本问题所示。我更喜欢使用 LabelSet 而不是 Legend,因为您可以精确控制文本位置并使用数据源对其进行更新。但不幸的是,我不知道如何在绘图框外绘制标签文本。
这是一些绘制 LabelSet 的代码,并注意文本如何仅显示在框内(66.1x 被 yaxis 部分阻挡):
import pandas as pd
from bokeh.io import output_notebook
output_notebook()
from bokeh.plotting import figure, show
from bokeh.models import LabelSet, ColumnDataSource
#import bokeh.sampledata
#bokeh.sampledata.download()
from bokeh.sampledata.stocks import MSFT
df = pd.DataFrame(MSFT)[:50]
df["date"] = pd.to_datetime(df["date"])
p = figure(
x_axis_type="datetime", width=1000, toolbar_location='left',
title = "MSFT Candlestick", y_axis_location="right")
p.line(df.date, df.close)
ds = ColumnDataSource({'x': [df.date.iloc[-1]], 'y': [df.close.iloc[-1]], 'text': [' ' + str(df.close.iloc[-1])]})
ls = LabelSet(x='x', y='y', text='text', source=ds)
p.add_layout(ls)
show(p)