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
相关产品推荐
相关产品推荐

