Bokeh折线图X轴优化:仅显示有数据的年度周数刻度
解决Bokeh折线图X轴仅显示存在数据的周数刻度
步骤说明
导入Bokeh所需的自定义刻度和格式化模块:
from bokeh.models import FixedTicker, DatetimeTickFormatter import time修改图表的X轴配置,替换自动生成的刻度为仅包含数据点的自定义刻度:
- 从数据源中提取所有存在的日期,转换为Bokeh兼容的毫秒级时间戳(如果
DateTime是Python原生datetime对象,用time.mktime转换;如果是PandasTimestamp,用dt.value // 10**6):tick_timestamps = [time.mktime(dt.timetuple()) * 1000 for dt in sourceIndicatori.data['DateTime']] - 配置X轴刻度器和格式化器,仅显示数据对应的周数:
plotIndicatori.xaxis.ticker = FixedTicker(ticks=tick_timestamps) plotIndicatori.xaxis.formatter = DatetimeTickFormatter( weeks=["%W/%Y"], days=["%W/%Y"], hours=["%W/%Y"] )
- 从数据源中提取所有存在的日期,转换为Bokeh兼容的毫秒级时间戳(如果
完整修改后的代码
from bokeh.models import FixedTicker, DatetimeTickFormatter import time plotIndicatori = figure(plot_width=int(850), plot_height=int(165), tools="pan,box_zoom,reset", title=nomeIndicatore, x_axis_type="datetime") plotIndicatori.toolbar.logo = None plotIndicatori.y_range.start = 0 plotIndicatori.y_range.end = rangeMax + 5 plotIndicatori.line(x='DateTime', y='Valore', color="navy", alpha=1, source=sourceIndicatori) plotIndicatori.circle(x='DateTime', y='Valore', color="navy", alpha=1, source=sourceIndicatori) plotIndicatori.xgrid.grid_line_color = None plotIndicatori.outline_line_color = background plotIndicatori.border_fill_color = background plotIndicatori.background_fill_color = background # 自定义X轴刻度,仅显示有数据的周数 tick_timestamps = [time.mktime(dt.timetuple()) * 1000 for dt in sourceIndicatori.data['DateTime']] plotIndicatori.xaxis.ticker = FixedTicker(ticks=tick_timestamps) plotIndicatori.xaxis.formatter = DatetimeTickFormatter( weeks=["%W/%Y"], days=["%W/%Y"], hours=["%W/%Y"] )
补充说明
- 格式字符串
%W/%Y表示周一为一周起始的周数+年份,若需要周日起始的周数,可替换为%U/%Y。 - 配置后X轴只会渲染数据源中存在的日期对应的刻度,不会生成多余的日期标签。
内容的提问来源于stack exchange,提问作者bircastri
相关产品推荐
相关产品推荐

