Полигоны на графике holoviews с временной осью X - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть кривая holoviews, основанная на pandas кадре данных с временными метками. Это хорошо, поскольку он дает автоматическое c форматирование оси x на основе уровня масштабирования.

Вверху кривой я хочу нарисовать прямоугольники, которые выделяют определенные области во временном ряду. Каждое выделение имеет некоторые метаданные, которые я хочу показать в Hover. Рабочий пример - за исключением наличия оси X даты-времени - генерируется с помощью кода ниже:

# imports
import numpy as np
import pandas as pd
import holoviews as hv
hv.notebook_extension('bokeh')

# generate data for time series
n = 10**4
t0 = 1513393355.5
delta_t = np.linspace(0,60*60*24*7,n)
y = pd.Series(np.sin(delta_t/60/60)*np.cos(delta_t/60/60/24))
x = pd.Series(t0+dt for dt in delta_t)
df= pd.DataFrame(dict(x=x,y=y))

# create data for polygons bounding the time series
def make_poly_dict(idx1,idx2):
    left   =x[idx1]
    right  =x[idx2]
    bottom =y[idx1:idx2].min()
    top    =y[idx1:idx2].max()
    mean   =y[idx1:idx2].mean()
    std    =y[idx1:idx2].std()
    return dict(xs=[left,right,right,left,left],ys=[bottom,bottom,top,top,bottom],mean=mean,std=std)
step_len = n//30
poly_list = [make_poly_dict(j*step_len,(j+1)*step_len-1) for j in range(0,n//step_len)]


# Plot
curve = hv.Curve(df_timeseries,vdims=['y'],kdims=['x']) # I really use datashader here, if that matters...
polys = hv.Polygons(poly_list,['xs','ys'],['mean','std']).opts(tools=['hover'])
polys*curve

Замена строки

x = pd.Series(t0+dt for dt in delta_t)

на

x = pd.Series(pd.Timestamp(t0+dt, unit='s') for dt in delta_t)

дает мне ось метки времени, которую я хочу, но hv.Polygon не может обрабатывать входные данные pd.Timestamp. Он поднимает TypeError: float() argument must be a string or a number, not 'Timestamp'.

Я пытался использовать pd.Timestamp для hv.Curve и просто отметки времени эпохи для hv.Polygons. Это невозможно объединить в оверлей с ошибкой invalid type promotion.

Как нарисовать прямоугольники с всплывающей подсказкой на данных временных рядов в HoloViews?

пс. Я могу сделать хорошие прямоугольники с hv.Bounds, но я не понимаю, как заставить всплывающую подсказку работать в этом случае ...

...