Bokeh HoverTool工具提示日期显示为数字的问题求助
解决折线图提示框显示时间戳而非日期格式的问题
这个问题我之前也碰到过!其实核心原因是虽然你的Pandas DataFrame里ENTRYDATE已经是datetime类型了,但绘图库(大概率是Plotly吧?毕竟带提示框的折线图常用它)在渲染提示框时,默认读取了datetime类型底层对应的时间戳数值,而没有转换成人类友好的日期格式。下面分几种常见的绘图场景给你解决方案:
1. 如果你用的是Plotly Express
Plotly Express可以直接通过hover_data参数指定日期的显示格式,非常方便:
import plotly.express as px # 假设你的DataFrame是df,y轴对应的数据列是'your_value_column' fig = px.line( df, x='ENTRYDATE', y='your_value_column', # 用|分隔符指定日期格式,%Y-%m-%d对应年-月-日 hover_data={'ENTRYDATE': '|%Y-%m-%d'} ) fig.show()
你也可以根据需求调整格式字符串,比如%Y-%m-%d %H:%M:%S可以显示带时分秒的完整时间。
2. 如果你用的是Plotly Graph Objects
如果是手动构建Graph Objects图表,可以通过hovertemplate自定义提示框的内容和格式:
import plotly.graph_objects as go fig = go.Figure() fig.add_trace(go.Scatter( x=df['ENTRYDATE'], y=df['your_value_column'], # 自定义提示框模板,%{x|%Y-%m-%d}指定日期格式,<extra></extra>去掉默认的系列名称 hovertemplate='日期: %{x|%Y-%m-%d}<br>数值: %{y}<extra></extra>' )) # 可选:设置统一的x轴 hover 模式 fig.update_layout(hovermode='x unified') fig.show()
3. 如果你用的是Matplotlib(搭配mplcursors实现提示框)
如果是用Matplotlib结合mplcursors做提示框,需要在光标回调里手动格式化日期:
import matplotlib.pyplot as plt import mplcursors fig, ax = plt.subplots() ax.plot(df['ENTRYDATE'], df['your_value_column']) # 定义提示框内容的格式化函数 @mplcursors.cursor(hover=True).connect("add") def on_add(sel): # 从DataFrame中取出对应索引的日期,转成指定格式 date_str = df['ENTRYDATE'].iloc[sel.target.index].strftime('%Y-%m-%d') sel.annotation.set_text(f"日期: {date_str}\n数值: {sel.target[1]}") plt.show()
最后再确认一下:先通过print(df['ENTRYDATE'].dtype)检查你的ENTRYDATE列确实是datetime64[ns]类型,如果不是的话,先重新转换一次:
df['ENTRYDATE'] = pd.to_datetime(df['ENTRYDATE'])
内容的提问来源于stack exchange,提问作者machump
相关产品推荐
相关产品推荐

