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

通过matplotlib的Artist对象更新文本不生效问题求解

问题原因

你要修改的+1e6是坐标轴的偏移文本,由坐标轴的ScalarFormatter自动维护。你调用set_text()修改内容后,plt.show()触发的图表重绘会让formatter重新生成默认的偏移文本,直接覆盖你手动修改的内容,因此文本修改不生效。而颜色、位置属性不会被formatter重置,因此可以正常生效。

解决方法

方案1:关闭偏移自动计算,保留手动修改的内容

在你原有修改文本的代码后,新增一行关闭formatter的自动偏移功能即可:

import matplotlib.pyplot as plt

# 生成图表
data = [1e6 + i for i in range(10)]
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.plot(data)
plt.title("Normal")
plt.subplot(1, 2, 2)
plt.plot(data)
plt.title("Updated Artist")
plt.draw()

# 查找目标Text对象
t = plt.gca().findobj(plt.Text)
t = next(filter(lambda x: x.get_text() == '+1e6', t))

# 修改位置
pos = t.get_position()
pos = (pos[0]+0.1, pos[1])
t.set_position(pos)

# 修改属性
t.set_text('1,000,000')
t.set_color('red')
# 新增这行,禁止formatter自动更新偏移文本
plt.gca().yaxis.get_major_formatter().set_useOffset(False)

plt.show()

方案2:直接通过formatter设置偏移文本(更规范)

不需要手动查找Text对象,直接操作formatter的属性修改偏移内容,逻辑更清晰:

import matplotlib.pyplot as plt

data = [1e6 + i for i in range(10)]
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.plot(data)
plt.title("Normal")
plt.subplot(1, 2, 2)
plt.plot(data)
plt.title("Updated Artist")

# 直接操作y轴的formatter设置偏移
y_formatter = plt.gca().yaxis.get_major_formatter()
y_formatter.set_offset_string('1,000,000')
y_formatter.set_useOffset(False)

# 修改偏移文本的样式和位置
offset_text = plt.gca().yaxis.get_offset_text()
offset_text.set_color('red')
offset_text.set_position((offset_text.get_position()[0]+0.1, offset_text.get_position()[1]))

plt.show()

示例效果图


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:45:01