如何在Matplotlib中使用f-string时修改标题部分文字颜色?
解决Matplotlib标题局部文字变色的问题
要实现标题中仅预测类别文字按color变量变色,不能直接用普通f-string整串设置标题(因为plt.title()的color参数会作用于整个标题),推荐以下两种方法:
方法一:使用HTML标记(推荐)
Matplotlib支持在文本中嵌入HTML <span> 标签来指定局部文字样式,直接构建带颜色标记的标题文本即可:
# 生成带颜色标记的预测类别文本 pred_class_colored = f"<span style='color:{color}'>{class_names[y_pred_class]}</span>" # 计算置信度数值 confidence_val = torch.softmax(y_pred, dim=1).max().item() # 拼接完整标题文本 full_title = f"Predicted: {pred_class_colored} | Confidence: {confidence_val:.2f}" # 设置标题,Matplotlib会自动解析HTML标记 plt.title(full_title)
这种方法无需额外处理,代码简洁且兼容性好,大部分Matplotlib后端都支持。
方法二:通过Text对象修改局部字符颜色
如果不想用HTML标记,可以先创建标题的Text对象,再定位到预测类别的字符区间修改颜色:
# 计算置信度并生成原始标题文本 confidence_val = torch.softmax(y_pred, dim=1).max().item() full_title = f"Predicted: {class_names[y_pred_class]} | Confidence: {confidence_val:.2f}" # 创建标题并获取对应的Text对象 title_obj = plt.title(full_title) # 定位预测类别文本在标题中的位置 pred_text_start = len("Predicted: ") pred_text_end = pred_text_start + len(class_names[y_pred_class]) # 修改对应区间的字符颜色 title_obj._text.set_color(pred_text_start, pred_text_end, color)
这种方法需要手动计算字符索引,适合对文本样式有更精细控制的场景。
内容的提问来源于stack exchange,提问作者mam1680
相关产品推荐
相关产品推荐

