如何从1000个data_i.dat文件提取指定行列数据绘图?
解决方法
你的代码存在两个问题:一是循环范围从0开始,但你的文件是从data_1.dat到data_1000.dat,会尝试读取不存在的data_0.dat;二是默认会用文件内的第一列作为x轴,而你需要的x是文件序号i,y是对应文件第352行的第2列数据。
给你两种可行的实现方式:
方式一:纯Gnuplot实现(无需外部工具)
用数组存储每个文件的目标值,再统一绘图:
# 创建数组存储1000个y值 array y[1000] # 循环遍历每个文件 do for [i=1:1000] { # 提取对应文件第352行第2列的数据,不输出统计信息 stats sprintf('data_%d.dat', i) every ::352::352 using 2 nooutput # 因为只取一行,STATS_min和STATS_max都是目标值,随便存一个即可 y[i] = STATS_min } # 绘制点,x轴为文件序号1-1000,y轴为数组中的对应值 plot [1:1000] '+' using 1:(y[$1]) with points title "各文件第352行第2列数据"
方式二:借助外部工具(适合Unix/Linux环境)
用sed直接提取目标行,绘图时指定x为循环序号:
plot for [i=1:1000] sprintf('< sed -n "352p" data_%d.dat', i) using (i):2 with points title "各文件第352行第2列数据"
这里sed -n "352p"的作用是只输出文件的第352行,using (i):2表示把循环变量i作为x轴,该行的第2列作为y轴。
内容的提问来源于stack exchange,提问作者user199253
相关产品推荐
相关产品推荐

