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

Matplotlib单个X轴刻度标签设置多色的实现方法求助

实现Matplotlib单标签内多行文本分色

Matplotlib默认的刻度标签是单个Text元素,没法直接给同一标签内的不同行设置不同颜色。要实现你要的效果,得手动拆分每行文本,分别创建带颜色的文本对象替换原标签,具体代码如下:

import matplotlib.pyplot as plt
import seaborn as sns

labels = ['1first_color\nsecond_color', '2first_color\nsecond_color', '3first_color\nsecond_color',
          '4first_color\nsecond_color', '5first_color\nsecond_color']
colors = [sns.color_palette('tab10')[0], sns.color_palette('tab10')[1]]  

plt.plot(range(len(labels)), [0, 1, 2, 3, 4])

# 设置刻度位置,但先隐藏默认标签
plt.xticks(range(len(labels)), labels=['']*len(labels))
ax = plt.gca()

# 获取每个刻度的x坐标,以及y轴底部的位置作为文本基准
tick_x = ax.get_xticks()
base_y = ax.get_yticks()[0]

for idx, label in enumerate(labels):
    # 拆分标签的两行内容
    line1, line2 = label.split('\n')
    x_pos = tick_x[idx]
    
    # 绘制第一行文本,用第一种颜色
    ax.text(x_pos, base_y - 0.15, line1, color=colors[0], 
            ha='center', va='top', fontsize=10)
    # 绘制第二行文本,用第二种颜色,位置稍低
    ax.text(x_pos, base_y - 0.3, line2, color=colors[1], 
            ha='center', va='top', fontsize=10)

# 清空原有的空刻度标签
ax.set_xticklabels([])

plt.tight_layout()
plt.show()

关键说明

  • 先把原刻度标签设为空,避免和手动绘制的文本重叠
  • 使用ax.text()分别绘制两行文本,通过调整y参数控制上下行的间距(-0.15、-0.3这类值可以根据图表尺寸自行调整)
  • ha='center'确保文本在刻度位置水平居中,va='top'控制垂直对齐方式,让两行文本整齐排列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:20:09