2016-12-29 1 views
1

파이썬에서 Bokeh를 통해 라인 플롯을 얻으려고합니다. 나는 Bokeh를 처음 사용하고 있으며 플롯 위에 마우스 오버 도구 팁을 적용하려고합니다. 플롯의 x 축에는 시간 소인 값이 있으며이 값은 에포크 문자열로 변환됩니다. 나는 몇몇 동일한 문제를 여기에서 검토하고 나의 케이스를위한 회피 방법을 사용하는 것을 시도했다 그러나 일하는 것처럼 보이지 않는다. 플롯에서 시간이 표시되어야하는 곳은 ???입니다.파이썬 : Bokeh hover date time

내 코드에 대한 제안 사항이 있습니까?

타임 스탬프는 또한 누군가가 내가 수직으로 표시하는 x-axis 진드기의 서식을 어떻게 알 수

형식 2016-12-29 02:49:12에?

p = figure(width=1100,height=300,tools='resize,pan,wheel_zoom,box_zoom,reset,previewsave,hover',logo=None) 
p.title.text = "Time Series for Price in Euros" 
p.grid.grid_line_alpha = 0 
p.xaxis.axis_label = "Day" 
p.yaxis.axis_label = "Euros" 
p.ygrid.band_fill_color = "olive" 
p.ygrid.band_fill_alpha = 0.1 
p.circle(df['DateTime'],df['EuP'], size=4, legend='close', 
    color='darkgrey', alpha=0.2) 
p.xaxis.formatter = DatetimeTickFormatter(formats=dict(
hours=["%d %B %Y"], 
days=["%d %B %Y"], 
months=["%d %B %Y"], 
years=["%d %B %Y"], 
)) 

source = ColumnDataSource(data=dict(time=[x.strftime("%Y-%m-%d %H:%M:%S")for x in df['DateTime']])) 
hover = p.select(dict(type=HoverTool)) 
hover.tooltips = {"time":'@time', "y":"$y"} 
hover.mode = 'mouse' 
p.line(df['DateTime'],df['EuP'],legend='Price',color='navy',alpha=0.7) 

답변

4

당신의 툴팁의 문제는 당신이 날짜의 문자열 표현으로 소스를 생성하지만 p.line() 전화는 인식하지 못합니다. 따라서 툴팁, x와 y 값을 가진 콜론 소스 소스를 전달해야합니다.

from bokeh.plotting import figure, show 
from bokeh.models.formatters import DatetimeTickFormatter 
from bokeh.models import ColumnDataSource 
from bokeh.models.tools import HoverTool 
import pandas as pd 
import numpy as np 

data = { 
    'DateTime' : pd.Series(
     ['2016-12-29 02:49:12', 
     '2016-12-30 02:49:12', 
     '2016-12-31 02:49:12'], 
     dtype='datetime64[ns]'), 
    'EuP' : [20,40,15] 
} 
df = pd.DataFrame(data) 
df['tooltip'] = [x.strftime("%Y-%m-%d %H:%M:%S") for x in df['DateTime']] 
p = figure(width=1100,height=300,tools='resize,pan,wheel_zoom,box_zoom,reset,previewsave,hover',logo=None) 
p.title.text = "Time Series for Price in Euros" 
p.grid.grid_line_alpha = 0 
p.xaxis.axis_label = "Day" 
p.yaxis.axis_label = "Euros" 
p.ygrid.band_fill_color = "olive" 
p.ygrid.band_fill_alpha = 0.1 
p.circle(df['DateTime'],df['EuP'], size=4, legend='close', 
    color='darkgrey', alpha=0.2) 
p.xaxis.formatter = DatetimeTickFormatter(formats=dict(
hours=["%d %B %Y"], 
days=["%d %B %Y"], 
months=["%d %B %Y"], 
years=["%d %B %Y"], 
)) 
hover = p.select(dict(type=HoverTool)) 
tips = [('when','@tooltip'), ('y','$y')] 
hover.tooltips = tips 
hover.mode = 'mouse' 
p.line(x='DateTime', y='EuP', source=ColumnDataSource(df), 
     legend='Price',color='navy',alpha=0.7) 
show(p) 

은 또한 나뭇잎 툴팁에서 서식 옵션의 부족에 대한 개방 문제가주의 : 여기에

는 코드의 작업 변종이다.

또한

https://github.com/bokeh/bokeh/issues/1239

누군가가 내가 x 축 형식을 어떻게 말할 수는 수직으로 보여 틱 : 별도의 컬럼으로 datestrings를 포맷 할 필요는 없습니다하는 쉬운 방법이있을 수 있는가?

그들은 저에게 잘 보입니다. 미안하지만, 나는 그걸 도울 수 없습니다.

희망이 도움이됩니다.

추신 : 가져 오기 문을 사용하여 작업 스크립트를 게시하고 테스트 할 수 있도록 조롱 된 데이터 프레임을 게시하면 다음에 더 좋을 것입니다. 모든 것을 정렬하는 데 시간이 걸렸습니다. 그러나 나는 Bokeh를 배우기 때문에 괜찮습니다.

+0

이 코드는 python2.7에서 0.12.3 bokeh 버전에서 훌륭하게 작동했습니다. 그러나 그것은 비추천 경고가 있습니다 : bokeh/util/deprecation.py : 33 : BokehDeprecationWarning : DatetimeTickFormatter.formats는 Bokeh 0.12.3에서 더 이상 사용되지 않으며 제거 될 것이고 대신 개별 DatetimeTickFormatter 필드를 사용하십시오. warn (message) –

+0

@PabloReyes 그래도 비추 경고가 있습니다. 질문의 범위를 벗어 났으므로 나는 그것에 대해 조사하지 않았습니다. :) –