Matplotlib中ax.text变量不显示及语法错误问题求助
问题排查与解决
错误原因拆解
SyntaxError: positional argument follows keyword argument:这是Python基础语法错误,和Matplotlib无关——你调用ax.text()时,把位置参数(比如文本内容)放在了关键字参数(fontsize/color这类带=的参数)之后,Python要求位置参数必须排在关键字参数前面。- 文本未解析
{}:说明你没有真正完成字符串格式化操作,要么是格式化代码写错,要么是把带{}的原字符串直接传给了ax.text,没执行替换逻辑。
正确代码示例
假设要展示的变量为accuracy = 92.5,三种格式化方法的正确写法如下:
f-string写法
import matplotlib.pyplot as plt fig, ax = plt.subplots() accuracy = 92.5 # 严格遵循:位置参数(x坐标, y坐标, 格式化后的文本)在前,关键字参数在后 ax.text(0.5, 0.5, f"准确率: {accuracy}%", fontsize=12, ha='center') plt.show()
.format()写法
import matplotlib.pyplot as plt fig, ax = plt.subplots() accuracy = 92.5 # 先完成格式化得到最终字符串,再传入ax.text text_content = "准确率: {}%".format(accuracy) ax.text(0.5, 0.5, text_content, fontsize=12, ha='center') plt.show()
%格式化写法
import matplotlib.pyplot as plt fig, ax = plt.subplots() accuracy = 92.5 # 注意%%是转义显示百分号 text_content = "准确率: %.1f%%" % accuracy ax.text(0.5, 0.5, text_content, fontsize=12, ha='center') plt.show()
你可能踩的坑(错误写法示例)
# 错误1:位置参数(文本)放在关键字参数之后,直接触发语法错误 ax.text(0.5, 0.5, fontsize=12, f"准确率: {accuracy}%") # 错误2:未执行格式化,把变量当成额外位置参数传入,文本显示未解析的{} ax.text(0.5, 0.5, "准确率: {}%", accuracy, fontsize=12)
验证步骤
先单独格式化字符串并打印,确认输出符合预期后,再将该字符串作为ax.text的第三个位置参数传入,同时确保所有位置参数(x、y、文本)都在关键字参数之前。
内容的提问来源于stack exchange,提问作者Luca
相关产品推荐
相关产品推荐

