使用Pandas和Matplotlib绘制.txt数据时出现异常问题
问题分析与解决方案
问题根源
你的数据读取逻辑出错了:
- 文本文件里第二行是单位(nm、GPa),被
pd.read_csv当成了第一行数据,导致Depth和Hardness列混进了字符串值(比如nm、GPa),列类型变成object而非数值类型。 - Matplotlib无法正确处理包含字符串的序列,直接绘图就会出现你看到的黑块和异常图表。
修复步骤
1. 正确读取数据
修改pd.read_csv的参数,跳过单位行,确保只读取数值数据:
import matplotlib.pyplot as plt import pandas as pd %matplotlib inline # 第一行作为列名,跳过第二行(单位行,索引为1) data = pd.read_csv('data/srj.txt', delimiter='\t', skiprows=[1]) # 强制转换列为数值类型,彻底避免类型问题 data = data.convert_dtypes() print(data.head()) print(data.columns)
执行后会看到Depth和Hardness列都是纯数值类型,没有字符串混杂。
2. 重新绘制图表
此时再运行绘图代码,就能得到正常的曲线:
x = data['Depth'] y = data['Hardness'] plt.plot(x,y, 'r-', label='Depth-Hardness') plt.xlabel('Depth [nm]') plt.ylabel('Hardness [GPa]') plt.title('Depth-Hardness-Curve') plt.legend() # 加上这行才能显示图例标签 plt.show()
补充说明
如果之前手动删除单位行后没效果,大概率是删除后没有重新读取数据,或者读取时仍有格式问题。用skiprows参数无需修改原始文件,是最稳妥的处理方式。
内容的提问来源于stack exchange,提问作者Peter Koch
相关产品推荐
相关产品推荐

