在Bokeh中添加悬停工具标签到Spans?

时间:2017-03-20 18:46:14

标签: python bokeh

我知道您可以使用Label()函数为绘图添加自定义标签,但您必须指定(x,y)坐标才能放置标签。

我有几个时间序列数据的注释,我正在使用Span()添加到绘图中,但我真正喜欢的是,如果我可以将标签添加到那些只在您将鼠标悬停时显示的Span注释Span对象。这似乎很简单,但我真的很挣扎。

以下是我一直在努力解决此问题的示例代码:

<!DOCTYPE html>
<html>
  <head>
    <title>Leaflet 1.0.3</title>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link type="text/css" rel="stylesheet" href="//unpkg.com/leaflet@1.0.3/dist/leaflet.css" />
  </head>
  <body>
    <div id="leaflet"></div>
    <script type="application/javascript" src="//unpkg.com/leaflet@1.0.3/dist/leaflet.js"></script>
  </body>
</html>

请记住,我不知道如何使用javascript。

1 个答案:

答案 0 :(得分:1)

考虑到您评论说您不知道如何使用JS,我提出以下解决方案作为实现所需内容的一种可能方法。

from bokeh.io import show, output_notebook
from bokeh.plotting import figure

from bokeh.core.properties import value
from bokeh.models import Span, HoverTool

output_notebook()

fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
years = ["2015", "2016", "2017"]
colors = ["#c9d9d3", "#718dbf", "#e84d60"]

data = {'fruits' : fruits,
        '2015'   : [2, 1, 4, 3, 2, 4],
        '2016'   : [5, 3, 4, 2, 4, 6],
        '2017'   : [3, 2, 4, 4, 5, 3]}

p = figure(x_range=fruits, plot_height=250, title="Fruit Counts by Year",
           toolbar_location=None, tools="")

p.vbar_stack(years, x='fruits', width=0.9, color=colors, source=data,
             legend=[value(x) for x in years])

constant_line = [2.5, 2.5, 2.5, 2.5, 2.5, 2.5]
partial = p.line(fruits, constant_line, line_width=0.01, line_color='green', line_dash='dashed')

p.add_tools(HoverTool(renderers = [partial],tooltips=[("Value Constant", str(constant_line[0]))]))

daylight_savings_start = Span(location=2.5,
                              dimension='width', line_color='green',
                              line_dash='dashed', line_width=3)
p.add_layout(daylight_savings_start)


p.y_range.start = 0
p.x_range.range_padding = 0.1
p.xgrid.grid_line_color = None
p.axis.minor_tick_line_color = None
p.outline_line_color = None
p.legend.location = "top_left"
p.legend.orientation = "horizontal"
show(p)

您可以直接在jupyter笔记本上运行以前的代码,仅安装bokeh。

问题在于,如果仅绘制一条线,它不会从-infinity延伸到infinity。

enter image description here

如果在行上添加跨度,将得到以下结果。

enter image description here