散景 Hovertool 工具提示将日期显示为数字

bokeh Hovertool tooltips showing date as number

对 csv 进行一些转换后,我有一个数据框:

ENTRYDATE |  TRANSACTIONS
2017/05/01     5
2017/05/02     20
..
2018/02/05     15

我在 pandas 中将其转换为日期时间,并使用

创建了带有工具提示的线图
import pandas as pd
from bokeh.models import ColumnDataSource,DatetimeTickFormatter, NumeralTickFormatter, HoverTool
from bokeh.plotting import figure
from bokeh.io import curdoc

df=pd.read_csv(r'C:\Users\file.csv')    
df2=df[['ENTRYDATE']] 
df2['ENTRYDATE']=pd.to_datetime(df2['ENTRYDATE'],infer_datetime_format=True)
df2=(df2.groupby([df2['ENTRYDATE'].dt.date]).size().reset_index(name='Transactions'))
#print(df2)
#print(df2.info())

source=ColumnDataSource(data=df2)

#hovertool

p=figure(plot_width=800,plot_height=500)

hover=HoverTool(tooltips=[("Date","@ENTRYDATE"),("Transactions","@Transactions")],
formatters={"ENTRYDATE":"datetime"},
mode='vline')
p.add_tools(hover)

p.scatter(x="ENTRYDATE",y="Transactions",color='blue', source=source)
p.xaxis.formatter=DatetimeTickFormatter()
p.yaxis.formatter=NumeralTickFormatter(format="0")

curdoc().add_root(p)

出于某种原因,显示 ENTRYDATE 的工具提示实际上并未显示日期(即 2017-05-01),而是显示了一些长数字(即 14962752000000)。谁能告诉我如何编辑它以便工具提示以日期格式显示日期?

您需要在 formatters 字典中告诉它 CDS 列名称,并且还需要为该字段指定您想要的实际特定日期时间格式,例如

HoverTool(tooltips=[
    ("Date", "@ENTRYDATE{%F}"),  # must specify desired format here
    ("Transactions", "@Transactions")
], formatters={"@ENTRYDATE":"datetime"}, mode='vline')

另一种方法是将日期转换为字符串作为单独的列。从雅虎获取一些股票数据。我有以下代码

import pandas as pd

# use bp as bokeh plot
from bokeh.plotting import figure, output_file, show
from bokeh.models import Range1d, HoverTool, ColumnDataSource


# get the datetime library for date & time calcs
from datetime import datetime, timedelta

data = pd.read_csv("DJI.csv")

data.head()

初始数据框如下图所示。

然后执行以下绘图操作:

# clean up the date fields to become dates

data['Date'] = pd.to_datetime(data['Date'], format='%Y-%m-%d')

# create a string column for plotting
data["DateString"] = data["Date"].dt.strftime("%Y-%m-%d")

# work on the bokeh plot
# set the data source for the plots and hover tool
cds = ColumnDataSource(data)

bp = figure(width=500, height=250, x_axis_type="datetime", sizing_mode="scale_width")
# bp.x_range = Range1d(bounds=(2015-12-31, 2018-12-28))

# make the hover tool and add it
hover = HoverTool(tooltips = [("Date","@DateString"),("Close", "@Close")])
bp.add_tools(hover)

bp.line("Date", "Close", color = "Red", alpha = 0.5, source = cds)

output_file("Timeseries.html")
show(bp)