能否旋转Bokeh图表的次级X轴标签?
如何旋转Bokeh图表X轴的次级标签
当然可以实现!下面分两种常见场景给出具体的操作方法:
场景1:基于FactorRange的多级分类轴
如果你的X轴是用FactorRange构建的多级标签(比如主标签是大类,次级标签是下属子类别),可以通过以下方式单独调整次级标签的倾斜角度:
- 先搭建基础图表结构(以分组柱状图为例):
from bokeh.plotting import figure, show from bokeh.models import FactorRange, ColumnDataSource # 定义多级因子:主标签是viral/non_viral,次级标签是子样本 factors = [("viral", "sample1"), ("viral", "sample2"), ("non_viral", "sample1"), ("non_viral", "sample2")] source = ColumnDataSource(data=dict( x=factors, y=[10, 12, 8, 9] )) p = figure(x_range=FactorRange(*factors), height=350, title="Sample Data") p.vbar(x='x', top='y', width=0.9, source=source)
- 针对性调整次级标签的旋转角度:
# 获取X轴的因子刻度器 x_ticker = p.xaxis.ticker[0] # 设置次级标签的倾斜角度(用弧度制,45度对应π/4≈0.785) x_ticker.major_label_orientation = 0.785 # 若需要保持主标签垂直/水平,可单独调整主标签的方向: # x_ticker.group_label_orientation = 1.57 # 90度垂直,对应π/2
- 最后展示图表:
show(p)
场景2:手动添加次级标签(更灵活的自定义)
如果你的次级标签是通过LabelSet手动添加的,直接在创建标签时设置angle参数即可:
from bokeh.models import LabelSet # 准备次级标签的数据源,对应每个柱子的位置 secondary_labels = ColumnDataSource(data=dict( x=[0.5, 1.5, 2.5, 3.5], text=["sub1", "sub2", "sub1", "sub2"] )) # 创建标签集,设置倾斜角度和对齐方式 labels = LabelSet(x='x', y=-1, text='text', source=secondary_labels, angle=0.785, # 45度倾斜 text_align="right", text_baseline="middle") p.add_layout(labels) show(p)
小提示
- 角度参数默认用弧度制,如果你习惯用角度,可导入
math模块用math.radians(45)转换。 - 要是用Bokeh服务器做动态交互,在回调里调整标签样式时,记得正确引用对应的标签对象。
内容的提问来源于stack exchange,提问作者Utopia025




