首页 > 解决方案 > 如何在绘图框外绘制 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)

在此处输入图像描述 请让我知道如何在框外显示 LabelSet,谢谢

标签: pythonpandasbokeh

解决方案


推荐阅读