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

Matplotlib y轴未应用Helvetica字体及x轴标签重复问题咨询

解决波形图字体与x轴标签问题

修改后的完整代码

from matplotlib import rc
import matplotlib.pyplot as plt
import librosa
import librosa.display

# 配置Helvetica字体(适配LaTeX渲染)
rc('font', **{'family': 'sans-serif', 'sans-serif': ['Helvetica']})
rc('text', usetex=True)
# 让LaTeX全局使用Helvetica
rc('text.latex', preamble=r'\usepackage{helvet}\renewcommand{\familydefault}{\sfdefault}')

# 加载音频文件
ref, sr = librosa.load(r"C:\Users\...\ref_4_dry.wav", mono=False, duration=10, sr=44100)
wn, sr = librosa.load(r"C:\Users\...\wn_4_dry.wav", mono=False, duration=10, sr=44100)
mwn, sr = librosa.load(r"C:\Users\...\mwn_4_dry.wav", mono=False, duration=10, sr=44100)

# 创建共享x轴的子图
fig, ax = plt.subplots(nrows=3, sharex=True, figsize=(15, 15))

# 绘制波形
librosa.display.waveshow(ref, sr=sr, ax=ax[0])
librosa.display.waveshow(wn, sr=sr, ax=ax[1])
librosa.display.waveshow(mwn, sr=sr, ax=ax[2])

# 只保留底部子图的x轴标签
for sub_ax in ax[:-1]:
    sub_ax.set_xlabel('')
ax[2].set_xlabel('time')

# 统一刻度字体大小(可选)
for sub_ax in ax:
    sub_ax.tick_params(axis='both', labelsize=10)

plt.tight_layout()
plt.show()

问题修复说明

1. y轴字体异常修复

开启usetex=True后,matplotlib会通过LaTeX渲染文本,仅设置rc('font')无法让LaTeX自动识别并使用Helvetica。添加LaTeX预定义代码后,强制LaTeX全局使用无衬线的Helvetica字体,确保x、y轴的刻度和标签都统一为目标字体。

2. x轴标签重复修复

虽然设置了sharex=True,但librosa.display.waveshow会给每个子图自动添加x轴标签。通过遍历上方两个子图清空标签,只给底部子图手动设置time标签,就能实现仅在底部显示x轴标签的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 09:45:49