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
相关产品推荐
相关产品推荐

