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

如何在Matplotlib子图Y轴用字母替换数值标签?

自定义Matplotlib Y轴刻度标签为字母/符号

没问题!要把Matplotlib Y轴的数值标签替换成你想要的-V₀、0、V₀这类自定义符号,最通用的方法就是手动指定刻度位置和对应的标签文本。下面是针对你的代码的具体修改方案:

核心方法

使用Matplotlib轴对象的两个关键方法:

  • set_yticks():定义要显示刻度的数值位置
  • set_yticklabels():给每个刻度位置分配自定义的文本标签(支持LaTeX语法渲染下标、特殊符号)

修改后的完整代码

import numpy as np
import matplotlib.pyplot as plt

# 示例参数(你可以替换成自己的实际值)
ang_freq = 2 * np.pi
times = np.linspace(0, 2, 1000)

v1 = np.sin(ang_freq * times)  # V_0sin(wt)
v2 = ang_freq * np.cos(ang_freq * times)

fig, axs = plt.subplots(2, sharex=True)
fig.suptitle('Sinusoidal driving wave')

# 处理输入电压子图(V1)
axs[0].plot(times, v1)
axs[0].set_title('Input voltage $V_1$')
axs[0].set_ylabel('Voltage / V')
axs[0].autoscale(enable=True, axis='x', tight=True)
# 自定义Y轴刻度:把-1.0、0、1.0替换为-$V_0$、0、$V_0$
axs[0].set_yticks([-1.0, 0.0, 1.0])
axs[0].set_yticklabels(['-$V_0$', '0', '$V_0$'])

# 处理输出电压子图(V2)
axs[1].plot(times, v2)
axs[1].set_title('Output voltage $V_2$')
axs[1].set_ylabel('Voltage / V')
axs[1].autoscale(enable=True, axis='x', tight=True)
# V2的极值是±ang_freq,对应替换为-$V_0$、0、$V_0$
v2_scale = [-ang_freq, 0, ang_freq]
axs[1].set_yticks(v2_scale)
axs[1].set_yticklabels(['-$V_0$', '0', '$V_0$'])

plt.xlabel('Times / s')
plt.show()

扩展:保留中间刻度并替换

如果你希望保留-0.5、0.5这些中间刻度,同时替换成对应的标签(比如-$V_0$/2、$V_0$/2),只需要扩展刻度和标签列表即可:

# 针对V1替换所有提到的刻度值
axs[0].set_yticks([-1.0, -0.5, 0.0, 0.5, 1.0])
axs[0].set_yticklabels(['-$V_0$', '-$V_0$/2', '0', '$V_0$/2', '$V_0$'])

注意事项

  • 确保set_yticks的位置数量和set_yticklabels的标签数量完全匹配,否则会触发报错
  • 用$...$包裹LaTeX语法可以让下标V_0渲染得更规范,和你图表标题的格式保持统一
  • 对于V2这类极值不是±1的曲线,通过动态获取极值(或直接使用-ang_freq、ang_freq)设置刻度,能让代码更通用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:38:52