如何用Python绘制文本文件指定两列数据的图表?代码无输出求助
解决Matplotlib无输出的问题
你的代码之所以没有输出,主要有几个关键问题,我给你拆解下并修正:
原代码的问题点
- 数据类型错误:你读取的
column1和column2是字符串类型,Matplotlib无法用字符串坐标绘制有效图形 - 逐点绘制无显示:每次循环调用
plt.plot()绘制单个数据点,而默认的plot是折线模式,单个点不会被渲染出来 - 坐标轴范围设置错误:你的数据时间范围是
0 ~ 0.01左右,体积范围是0.99 ~ 1.01,但你设置了xlim(0,1)和ylim(0,1),导致所有数据点都挤在坐标轴角落,根本看不到
修正后的代码
import numpy as np import matplotlib.pyplot as plt # 初始化空列表存储数据 times = [] volumes = [] # 读取文件并筛选有效数据 with open("textfile.txt", "r") as f: for line in f.readlines(): line_parts = line.strip().split() # 筛选VPRO开头且有足够列数的行 if len(line_parts) >= 3 and line_parts[0] == 'VPRO': # 转换为数值类型 time = float(line_parts[1]) volume = float(line_parts[2]) times.append(time) volumes.append(volume) # 转换为numpy数组(可选,直接用列表也可以) times = np.array(times) volumes = np.array(volumes) # 绘制折线图 plt.plot(times, volumes, marker='o', linestyle='-', label='Volume vs Time') # 设置符合数据范围的坐标轴 plt.xlim(min(times)-0.001, max(times)+0.001) plt.ylim(min(volumes)-0.005, max(volumes)+0.005) # 添加图表标签和标题 plt.xlabel('Time (s)') plt.ylabel('Volume (cm³)') plt.title('Volume Profile Over Time') plt.legend() # 显示图表 plt.show()
代码说明
- 先用空列表收集所有有效数据,避免逐行绘制的问题
- 把读取到的字符串数据转换为
float类型,确保Matplotlib能正确处理 - 设置了匹配数据实际范围的坐标轴,避免点被挤出可视区域
- 添加了
marker='o'可以显示每个数据点,同时保留折线连接,让图表更清晰 - 使用
with语句管理文件,更安全规范
这样运行后就能看到正常的体积随时间变化的图表啦!
内容的提问来源于stack exchange,提问作者Govind Kumar




