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

如何为Bokeh图表的坐标轴每个标签设置独立颜色?

嘿,这个需求我刚好折腾过!Bokeh默认的轴标签设置确实只能统一改颜色,但咱们可以用自定义标签渲染的方式实现单个标签独立配色,方法其实不难,我给你一步步拆解:

实现单个坐标轴标签独立配色的方法

核心思路是利用Bokeh的HTMLTemplateFormatter自定义标签的HTML样式,给每个标签单独指定颜色。

1. 先准备标签与颜色的对应关系

首先得明确你要给哪些标签设置什么颜色,比如假设你的x轴是分类标签,先把标签和颜色一一映射好:

# 示例:分类标签与对应颜色
labels = ["Q1", "Q2", "Q3", "Q4"]
label_colors = ["#FF5733", "#33FF57", "#3357FF", "#FF33A6"]
color_map = dict(zip(labels, label_colors))

2. 自定义HTML模板格式化器

用HTMLTemplateFormatter来生成带颜色样式的标签,模板用Underscore.js的语法,通过args把颜色映射字典传给模板:

from bokeh.models import HTMLTemplateFormatter

# 定义HTML模板:给每个标签套上带color样式的span标签
template = """
<span style="color: <%= color_map[value] %>; font-weight: bold"><%= value %></span>
"""

# 创建格式化器,传入模板和颜色映射
formatter = HTMLTemplateFormatter(template=template, args={"color_map": color_map})

3. 应用到图表的坐标轴

把自定义格式化器绑定到目标坐标轴,同时确保轴的范围是你的自定义标签(分类轴的情况):

from bokeh.plotting import figure, show

# 创建示例图表
p = figure(x_range=labels, plot_width=500, plot_height=300, title="季度数据")
p.vbar(x=labels, top=[120, 180, 90, 210], width=0.6)

# 应用格式化器到x轴
p.xaxis.formatter = formatter
# 可以调整标签字号让颜色更明显
p.xaxis.major_label_text_font_size = "14pt"

show(p)

针对数值轴的适配

如果你的坐标轴是数值型(比如日期、数字),只需要把颜色映射的键换成数值即可,示例如下:

# 数值轴的颜色映射
num_labels = [10, 20, 30, 40]
num_color_map = {10: "purple", 20: "cyan", 30: "magenta", 40: "brown"}

# 模板和格式化器逻辑和分类轴一致
num_template = """
<span style="color: <%= color_map[value] %>"><%= value %></span>
"""
num_formatter = HTMLTemplateFormatter(template=num_template, args={"color_map": num_color_map})

# 创建数值轴图表
p_num = figure(x_range=(5, 45), plot_width=500, plot_height=300, title="数值轴示例")
p_num.circle(x=num_labels, y=[5, 8, 3, 10], size=18)
p_num.xaxis.formatter = num_formatter

show(p_num)

关键注意点

  • 确保x_range(或y_range)和你的标签/数值对应,这样格式化器才能准确匹配颜色;
  • 模板里的<%= value %>会自动获取当前轴的标签值,通过color_map[value]拿到对应颜色;
  • 除了颜色,你还可以在模板里加其他样式,比如字体粗细、字号,灵活度很高!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:26:26