You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bokeh绘制股票Adj Close折线图显示空白,是否需先预处理数据?

解决Bokeh绘制股票折线图空白的问题

嘿,你的空白图表问题大概率是日期格式没处理对,再加上没配置你需要的悬浮提示框,我给你一步步梳理解决方案:

核心问题分析

Bokeh对日期类型的要求很严格,如果你的Date列是字符串格式,它没法自动识别为时间轴,就会导致图表空白。另外你还需要手动配置悬浮提示框来展示其余数据字段。

具体解决步骤

1. 先把日期数据转为datetime类型

用pandas把你的Date列解析成标准时间格式:

import pandas as pd
from bokeh.plotting import figure, show, output_notebook
from bokeh.models import ColumnDataSource, HoverTool

# 假设你的原始数据存储在DataFrame df中
df['Date'] = pd.to_datetime(df['Date'])

2. 正确初始化ColumnDataSource

确保hsc是用处理后的DataFrame创建的:

hsc = ColumnDataSource(df)

3. 配置折线图和悬浮提示框

现在重新创建图表,同时添加HoverTool来展示所有需要的字段:

s = figure(plot_height=600, plot_width=1000, title="Adjacent Closing Prices", 
           x_axis_label='Date', y_axis_label='Price',
           x_axis_type='datetime')  # 必须指定x轴为datetime类型,这是关键!

# 绘制折线
s.line(source=hsc, x='Date', y='Adj Close', line_width=2)

# 添加悬浮提示框,展示所有字段
hover = HoverTool(tooltips=[
    ("Date", "@Date{%F}"),  # 以YYYY-MM-DD格式显示日期
    ("Adj Close", "@{Adj Close}{0.2f}"),  # 保留两位小数展示收盘价
    ("Volume", "@Volume{0.00e}"),  # 用科学计数法展示成交量
    ("Daily Change", "@{Day_Perc_Change}{0.2f}%"),  # 百分比形式展示涨跌幅
    ("Index Name", "@Name")
], formatters={
    '@Date': 'datetime'  # 指定日期字段的格式化规则
})
s.add_tools(hover)

output_notebook()
show(s)

关键注意点

  • 必须给figure加上x_axis_type='datetime',明确告诉Bokeh这是时间轴
  • 字段名包含空格的(比如Adj Close),在HoverTool里要用@{Adj Close}的格式引用
  • 日期显示格式要配合formatters参数,确保日期展示符合预期

这样修改后,你的折线图应该能正常显示,而且鼠标悬浮时会弹出包含所有字段的提示框啦!

内容的提问来源于stack exchange,提问作者ceeslt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 03:37:37