如何修改ax.set_title实现Matplotlib标题文本多色显示?
解决Matplotlib标题文本分色问题
方法1:使用HTML风格富文本格式
Matplotlib原生支持HTML风格的<span>标签设置文本颜色,无需依赖LaTeX,直接修改标题字符串即可实现需求:
import matplotlib.pyplot as plt alpha, beta = 0.5, 0.5 n = 10 # 替换为实际的n值 fig, ax = plt.subplots(1, 1, figsize=(6,3)) title_content = ( r"Predicted $x$ with Bayes Factor w.r.t. $\beta(1,1)$:" + "\n" + "<span style='color:green'> > 3 (green)</span> or <span style='color:blue'> < 3 (blue)</span>" + "\n" + r"when prior = $\beta$" + f"({alpha}, {beta}) " + f"[n = {n}] " + "-NO DATA-" ) ax.set_title(title_content, fontsize=15) plt.show()
方法2:拆分标题为独立文本元素
如果富文本格式存在兼容性问题,可手动拆分标题内容,用ax.text()分别添加不同颜色的文本块,通过坐标调整实现对齐:
import matplotlib.pyplot as plt alpha, beta = 0.5, 0.5 n = 10 fig, ax = plt.subplots(1, 1, figsize=(6,3)) # 第一行标题(黑色) ax.text(0.5, 1.15, r"Predicted $x$ with Bayes Factor w.r.t. $\beta(1,1)$:", fontsize=15, ha='center', transform=ax.transAxes) # 带颜色的中间行 ax.text(0.5, 1.08, "> 3 (green)", color='green', fontsize=15, ha='center', transform=ax.transAxes) ax.text(0.5, 1.08, " or ", fontsize=15, ha='center', transform=ax.transAxes) ax.text(0.5, 1.08, "< 3 (blue)", color='blue', fontsize=15, ha='center', transform=ax.transAxes) # 最后一行标题(黑色) ax.text(0.5, 1.01, r"when prior = $\beta$" + f"({alpha}, {beta}) " + f"[n = {n}] " + "-NO DATA-", fontsize=15, ha='center', transform=ax.transAxes) # 调整顶部边距避免标题被截断 ax.margins(y=0.3) plt.show()
关于LaTeX方法无效的说明
你之前尝试的\textcolor{green}{...}是LaTeX语法,需要Matplotlib开启LaTeX渲染才能生效(需系统已安装LaTeX环境),开启方式如下:
plt.rcParams['text.usetex'] = True
但这种方式依赖外部环境,不如前两种方法便捷,推荐优先使用富文本格式。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

