循环绘制多文件TGA数据图表失败:仅显示空白图无报错
问题分析与修复方案
你的循环代码出现空白图表是由几个关键错误导致的,逐个修正即可解决:
1. 画布创建位置错误
你在循环绘图完成后调用plt.figure(),这会新建一个空白画布,最后plt.show()显示的是这个空白画布,而非你之前循环绘制内容的画布。必须在绘图前创建画布。
2. 绘图变量错误
循环里写的plt.plot(df['"Temp"'],df['Time'])存在两个问题:一是你实际要绘制的是质量损失百分比mass_percent,变量名写错成了df['Time'];二是原代码用的是散点图scatter,你这里改成了折线图plot,如果需要和原效果一致需改回。
3. 缺失必要库导入
代码用到了pd(pandas)和plt(matplotlib.pyplot),但循环代码里没有导入这两个库,必须补充导入。
4. 未定义rutas变量
代码直接使用rutas但没有定义,需要先获取目标目录下的所有TXT文件路径,否则循环不会执行,自然没有绘图内容。
5. 缺少图例区分
每个文件的曲线需要添加label参数,最后调用plt.legend()显示图例,方便区分不同文件的数据。
修正后的完整代码
import os import pandas as pd import matplotlib.pyplot as plt from google.colab import files import cv2 # 切换工作目录 os.chdir('/content/drive/MyDrive') print(os.getcwd()) # 获取目录下所有TXT文件路径(可根据实际文件名规则调整) rutas = [f for f in os.listdir() if f.endswith('.TXT')] # 提前创建画布 plt.figure(figsize=(10,6)) # 可选:设置画布尺寸 plt.xlabel("Temperature (°C)") plt.ylabel("Mass loss (%)") for ruta in rutas: # 读取数据 df = pd.read_csv(ruta, skiprows=22, names=['"Time"', '"Temp"','"TGA"'], sep="\t") # 统一转换数值类型 df = df.apply(pd.to_numeric, errors='coerce', downcast='float') # 计算质量损失百分比 df['mass_percent'] = df['"TGA"'] / 18.98 * 100 # 绘制散点图,用文件名作为图例标签 plt.scatter(df['"Temp"'], df['mass_percent'], label=ruta.split('.')[0]) # 显示图例 plt.legend() # 展示图表 plt.show()
额外说明
- 如果需要折线图,将
plt.scatter替换为plt.plot即可。 - 若不同文件的初始质量(18.98)不同,需调整该数值(比如从文件名或文件内容中读取对应值)。
- 若
rutas为空,检查工作目录下是否存在目标TXT文件,或调整文件名后缀的判断逻辑。
内容的提问来源于stack exchange,提问作者Leila
相关产品推荐
相关产品推荐

