web-dev-qa-db-ja.com

ボケプロット:一部のグリフに対してのみツールチップを有効にする

いくつかのグリフを含む図がありますが、特定のグリフのツールチップのみを表示したいと考えています。現在、ボケでこれを達成する方法はありますか?

あるいは、2つの図を互いに重ねてプロットする方法はありますか?そうすればやりたいことが達成できるようです。

21
Imaduck

グーグルグループのこのページのおかげで、私はこれがどのように行われることができるかを理解しました。 ここにリンク

2015-10-20を編集:残念ながら、Googleグループのリンクは機能しなくなったようです。サラ・バード@bokehplotからのメッセージでした。

編集2017-01-18:現在、これにより複数のホバーツールアイコンがツールバーに追加されます。これにより問題が発生する可能性があります。 githubに提出された問題がすでにあります ここ 。または、以下の回答で@tterryのソリューションを試してください。

基本的にあなたはする必要があります(ボケバージョン0.9.2):

  1. フィギュアを作成するときにhovertoolsを追加しないでください
  2. グリフを個別に作成する
  3. 図にグリフを追加する
  4. この一連のグリフのホバーツールを設定します
  5. フィギュアにホバーツールを追加します

例:

_import bokeh.models as bkm
import bokeh.plotting as bkp

source = bkm.ColumnDataSource(data=your_frame)
p = bkp.figure(tools='add the tools you want here, but no hover!')
g1 = bkm.Cross(x='col1', y='col2')
g1_r = p.add_glyph(source_or_glyph=source, glyph=g1)
g1_hover = bkm.HoverTool(renderers=[g1_r],
                         tooltips=[('x', '@col1'), ('y', '@col2')])
p.add_tools(g1_hover)

# now repeat the above for the next sets of glyphs you want to add. 
# for those you don't want tooltips to show when hovering over, just don't 
# add hover tool for them!
_

また、追加する各グリフに凡例を追加する必要がある場合は、bokeh.plotting_helpers._update_legend()メソッドを使用してみてください。 github source 例:

__update_legend(plot=p, legend_name='data1', glyph_renderer=g1_r)
_
16
WillZ

ホバーツールをアクティブにすることに関心のあるグリフのname=属性を使用してグリフに名前を付けてから、ホバーツールのnames=属性にその名前を設定する必要があります。 (以下の例では、name=グリフのfig.line属性に注意してください。

hover = HoverTool( mode='vline', line_policy='nearest', names=['ytd_ave'],
    tooltips=[
        ("Week Number", "@WeekNumber"),
        ("OH for the Week", "@OverHead{0.00}%"),
        ("OH Average", "@AveOverHead{0.00}%"),
        ("Non-Controllable Hours", "@NonControllableHours{0.0}"),
        ("Controllable Hours", "@ControllableHours{0.0}"),
        ("Total Hours", "@TotalHours{0.0}"),
    ]
)

fig = Figure(title='Weekly Overhead', plot_width=950, plot_height=400,
         x_minor_ticks=2, tools=['pan', 'box_zoom', 'wheel_zoom', 'save',
                                 'reset', hover])

ch = fig.vbar('WeekNumber', top='ControllableHours', name='Over Head', 
         color='LightCoral', source=sources, width=.5)
nch = fig.vbar('WeekNumber', bottom='ControllableHours', top='TotalOHHours',
         name='Non-Controllable Over Head', color='LightGray', 
         source=sources, width=.5)
bh = fig.vbar('WeekNumber', bottom='TotalOHHours', top='TotalHours',
         name='Project Hours', color='LightGreen', source=sources,
         width=.5)

ave = fig.line('WeekNumber', 'AveOverHead', source=sources, color='red',
         y_range_name='Percent_OH', name='ytd_ave')
11
Nickleman

張の答え は機能しますが、複数のホバーツールが表示されます。これが望ましくない場合は、既存のホバーツールにレンダラーを追加できます。

from bokeh import plotting
from bokeh.models import HoverTool, PanTool, ResetTool, WheelZoomTool

hover_tool = HoverTool(tooltips=[('col', '@x'),('row', '@y')])  # instantiate HoverTool without its renderers
tools = [hover_tool, WheelZoomTool(), PanTool(), ResetTool()]  # collect the tools in a list: you can still update hover_tool

plot = plotting.figure(tools=tools)
plot.line(x_range, y_range)  # we don't want to put tooltips on the line because they can behave a little strange
scatter = plot.scatter(x_range, y_range)  # we assign this renderer to a name...
hover_tool.renderers.append(scatter)  # ...so we can add it to hover_tool's renderers.

したがって、ここでの違いは次のとおりです。

  1. plottingインターフェイスを使用して、高レベルの方法でグリフを作成できますが、これは引き続き機能します。
  2. 毎回新しいHoverToolを作成する必要はありません(異なるツールチップが必要な場合を除く)。既存のツールのレンダラーに追加するだけです。
10
tterry

メンテナからの更新:ホバーIS行と画像の両方でサポートされるようになりました



廃止:

現在、ホバーは画像タイプのグリフと線のグリフではサポートされていません。したがって、これらのグリフの1つを、ホバーツールチップをサポートするグリフと組み合わせて使用​​すると、回避策になる可能性があります。

参照: http://docs.bokeh.org/en/latest/docs/user_guide/objects.html#hovertool

2
dyingoptimist