как получить значения осей на HoverTool - Bokeh - PullRequest
0 голосов
/ 23 января 2019

Я написал код, который читает из файлов .csv и преобразует его в фрейм данных pandas. Затем я продолжаю строить график со свечами. Сам график хороший, но когда я пытаюсь использовать HoverTools, я не могу добавить значения осей в инструмент. Я использовал источник данных столбца, но не смог его понять.

  import pandas as pd

  from math import pi

  from bokeh.plotting import figure, show, output_file

  from bokeh.models import HoverTool

  df = pd.read_csv('/Users/robindhillon/Desktop/pyfiles/EURUSD.csv')

  df.columns = ['date','open','high','low','close','volume']

  df['date'] = pd.to_datetime([x[:-9] for x in 
  df['date'].squeeze().tolist()], dayfirst=True)

  inc = df.close > df.open
  dec = df.open > df.close
  w = 86400000


  hover = HoverTool(
    tooltips=[
        ('date',   '@date'),
        ('open',  '@open' ), 
        ('high', '@high'  ),
        ('low',   '@low'   ),
        ('close',  '@close'),
    ],

    formatters={
        'date' : 'datetime', 
        'open' : 'numeral',   
        'high' : 'numeral',
        'low'  : 'numeral',
        'close': 'numeral',                  
    },

    mode='vline'
)

   TOOLS = 'pan,wheel_zoom,box_zoom,reset,save,crosshair'

   p = figure(x_axis_type = 'datetime', tools=TOOLS, plot_width=1200, 
   title='test')

   p.xaxis.major_label_orientation = pi/4
   p.grid.grid_line_alpha = 0.3

   p.add_tools(hover)

   p.segment(df.date, df.high, df.date, df.low, color="black")

   p.vbar(df.date[inc], w, df.open[inc], df.close[inc], 
   fill_color="#12C98C", line_color="black")

   p.vbar(df.date[dec], w, df.open[dec], df.close[dec], 
   fill_color="#F2583E", line_color="black")

   output_file("candlestick.html", title="candlestick.py example")

   show(p)  # open a browser

Ответы [ 2 ]

0 голосов
/ 23 января 2019

В дополнение к спецификации @field_name инструмента для наведения мыши есть также некоторые «специальные переменные» для отображения конкретной информации, не связанной с источником данных. Чтобы отобразить значение пространства данных координаты x под курсором, используйте $x

0 голосов
/ 23 января 2019

Имена полей, начинающиеся с @, связаны со столбцами в ColumnDataSource. Например, имя поля «@date» будет отображать значения из столбца «дата» при каждом наведении на них. Если наведение относится к 17-му символу, то во всплывающей подсказке соответственно будет отображаться 17-е значение даты. Инструмент наведения не будет работать, если вы используете имена полей, начинающиеся с @ без ColumnDataSource

import pandas as pd
from math import pi
from bokeh.plotting import figure, show, output_file
from bokeh.models import HoverTool, ColumnDataSource

df = pd.read_csv('/Users/robindhillon/Desktop/pyfiles/EURUSD.csv')
df.columns = ['date','open','high','low','close','volume']
df['date'] = pd.to_datetime([x[:-9] for x in 
df['date'].squeeze().tolist()], dayfirst=True)

inc = df.close > df.open
dec = df.open > df.close
w = 86400000

hover = HoverTool(
  tooltips=[
    ('date',   '@date{%F}'),
    ('open',  '@open' ), 
    ('high', '@high'  ),
    ('low',   '@low'   ),
    ('close',  '@close'),
  ],
  formatters={
    'date' : 'datetime', 
    'open' : 'numeral',   
    'high' : 'numeral',
    'low'  : 'numeral',
    'close': 'numeral',                  
  },
  mode='vline'
)

df['dateinc'] = df.date[inc]
df['openinc'] = df.open[inc]
df['closeinc'] = df.close[inc]
df['datedec'] = df.date[dec]
df['opendec'] = df.open[dec]
df['closedec'] = df.close[dec]

source = ColumnDataSource(df)

TOOLS = 'pan,wheel_zoom,box_zoom,reset,save,crosshair'

p = figure(x_axis_type = 'datetime', tools=TOOLS, plot_width=1200, 
title='test')

p.xaxis.major_label_orientation = pi/4
p.grid.grid_line_alpha = 0.3

p.add_tools(hover)
p.segment('date', 'high', 'date', 'low', color="black", source=source)
p.vbar('dateinc', w, 'openinc', 'closeinc', fill_color="#12C98C", line_color="black", source=source)

p.vbar('datedec', w, 'opendec', 'closedec', fill_color="#F2583E", line_color="black", source=source)

output_file("candlestick.html", title="candlestick.py example")

show(p)  # open a browser
...