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

Bokeh月度时间轴无法展示数据问题求助

解决Bokeh月度折线图X轴显示异常问题

核心修复步骤

1. 调整SQL查询,返回完整的当月起始日期

不要返回YYYY-MM格式的字符串,Bokeh的datetime轴需要完整的datetime对象。修改SQL生成当月第一天的日期值:

-- PostgreSQL 示例
SELECT DATE_TRUNC('month', date_column) AS month_start, COUNT(*) AS keyword_count
FROM your_table
WHERE date_column < DATE_TRUNC('month', CURRENT_DATE) -- 过滤未结束的月份
GROUP BY DATE_TRUNC('month', date_column)
ORDER BY month_start;

-- MySQL 示例
SELECT DATE_FORMAT(date_column, '%Y-%m-01') AS month_start, COUNT(*) AS keyword_count
FROM your_table
WHERE date_column < DATE_FORMAT(CURRENT_DATE, '%Y-%m-01')
GROUP BY DATE_FORMAT(date_column, '%Y-%m-01')
ORDER BY month_start;

2. 在Python中正确转换日期类型

用pd.to_datetime()替代astype('datetime64[M]'),确保日期列是标准datetime格式:

import pandas as pd
from bokeh.plotting import figure, show
from bokeh.models import DatetimeTickFormatter

# 读取SQL查询结果到DataFrame
df = pd.read_sql(your_sql_query, your_db_connection)
# 转换日期列
df['month_start'] = pd.to_datetime(df['month_start'])

# 创建图表并指定X轴为datetime类型
p = figure(x_axis_type="datetime", title="月度职位词汇出现次数", 
           x_axis_label="月份", y_axis_label="出现次数")
p.line(x=df['month_start'], y=df['keyword_count'], line_width=2)

# 自定义X轴刻度显示格式(年月)
p.xaxis.formatter = DatetimeTickFormatter(
    months=["%Y-%m"],
    years=["%Y-%m"]
)

show(p)

3. 补全缺失的月度数据

如果SQL返回的月度数据有断档,会导致X轴显示异常。可以生成完整的月度序列,左连接原数据填充0:

# 生成完整的月度日期范围
full_months = pd.date_range(start=df['month_start'].min(), end=df['month_start'].max(), freq='MS')
# 转换为DataFrame
full_month_df = pd.DataFrame({'month_start': full_months})
# 左连接原数据,缺失值填充0
merged_df = pd.merge(full_month_df, df, on='month_start', how='left').fillna(0)

# 使用merged_df绘制折线图
p.line(x=merged_df['month_start'], y=merged_df['keyword_count'], line_width=2)

避坑提醒

  • 禁止用字符串类型的年月作为X轴值,Bokeh的datetime轴仅识别标准datetime对象
  • astype('datetime64[M]')会把日期转为月份的数值编码(如2024-05会变成24293),并非Bokeh所需的datetime格式
  • 确认SQL过滤条件生效,避免包含未结束月份的不完整数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:02:09