如何用多个TXT文件绘制共享X轴的垂直堆叠折线图?
问题分析
你的代码核心问题有两个:
- 每次循环都固定使用
plt.subplot(2, 1, 1),所有折线都被绘制到同一个子图中,自然无法得到独立的子图效果 - 子图布局设置错误(2行1列),与你需要的5个垂直堆叠子图不匹配
修正后的代码
import glob import pandas as pd import matplotlib.pyplot as plt # 获取所有目标TXT文件 input_files = glob.glob('01-input/RR_*.txt') # 创建5行1列的子图,所有子图共享X轴,同时设置整体图大小 fig, axs = plt.subplots(nrows=5, ncols=1, sharex=True, figsize=(8, 12)) # 遍历每个文件和对应的子图索引 for idx, file in enumerate(input_files): # 读取制表符分隔的数据 df = pd.read_csv(file, header=None, delimiter="\t") x = df[0] y = df[1] # 获取当前子图的轴对象,绘制单独的折线 current_ax = axs[idx] current_ax.plot(x, y, linewidth=2, linestyle=':', label=f'样品 {idx+1}') # 设置当前子图的Y轴标签 current_ax.set_ylabel('y轴') # 添加图例区分不同样品 current_ax.legend() # 仅在最下方的子图设置X轴标签(共享X轴无需重复显示) axs[-1].set_xlabel('x轴') # 自动调整子图间距,避免标签重叠 plt.tight_layout() plt.show()
关键修改说明
- 子图创建方式:使用
plt.subplots()一次性生成5行1列的子图矩阵,通过sharex=True实现X轴共享,保证所有子图的X轴刻度同步 - 子图索引匹配:通过
enumerate获取文件的索引值,对应到axs数组中的子图轴对象,确保每个文件的折线绘制到独立子图 - 布局优化:将
plt.tight_layout()移至循环外,确保所有子图绘制完成后统一调整布局;仅在最后一个子图设置X轴标签,减少冗余元素 - 可读性提升:添加图例区分不同样品,设置合理的图大小,让堆叠后的子图更清晰
内容的提问来源于stack exchange,提问作者Hisham
相关产品推荐
相关产品推荐

