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
相关产品推荐
相关产品推荐

