我有一个包含多个数据集的文件,如下所示:
# Isochrone Z = 0.00800 Age = 1.000e+07 yr
# Mu Mb Mv Mr Mi Mj Mh Mk Flum
14.982 13.538 12.020 11.076 10.083 9.024 8.401 8.172 -9.59274740
13.741 12.481 11.074 10.195 9.366 8.378 7.710 7.510 -6.50542581
...
# Isochrone Z = 0.00800 Age = 1.122e+07 yr
# Mu Mb Mv Mr Mi Mj Mh Mk Flum
14.982 13.538 12.020 11.076 10.083 9.024 8.401 8.172 -9.59274740
13.741 12.481 11.074 10.195 9.366 8.378 7.710 7.510 -6.50542581
...
我需要能够使用索引功能,如下所示:
plot 'file' index n u 1:2
所以我可以绘制第n个数据集或一系列数据集(index a:b
),但是我得到x range is invalid
错误。可能是因为注释行不被视为两个空行。这可以解决吗?
此外,是否可以在图表的标题中包含年龄值?
答案 0 :(得分:1)
从gnuplot帮助:"数据集由成对的空白记录分开"。我猜你没有使用空行作为数据集分隔符。如果您的文件如下所示:
# Isochrone Z = 0.00800 Age = 1.000e+07 yr
# Mu Mb Mv Mr Mi Mj Mh Mk Flum
14.982 13.538 12.020 11.076 10.083 9.024 8.401 8.172 -9.59274740
13.741 12.481 11.074 10.195 9.366 8.378 7.710 7.510 -6.50542581
# Isochrone Z = 0.00800 Age = 1.122e+07 yr
# Mu Mb Mv Mr Mi Mj Mh Mk Flum
14.982 13.538 12.020 11.076 10.083 9.024 8.401 8.172 -9.59274740
13.741 12.481 11.074 10.195 9.366 8.378 7.710 7.510 -6.50542581
然后以下bash命令可以添加空白行而无需手动编辑文件的内容:
user@machine:~$ sed 's/# Isochrone/\n\n# Isochrone/g' file
# Isochrone Z = 0.00800 Age = 1.000e+07 yr
# Mu Mb Mv Mr Mi Mj Mh Mk Flum
14.982 13.538 12.020 11.076 10.083 9.024 8.401 8.172 -9.59274740
13.741 12.481 11.074 10.195 9.366 8.378 7.710 7.510 -6.50542581
# Isochrone Z = 0.00800 Age = 1.122e+07 yr
# Mu Mb Mv Mr Mi Mj Mh Mk Flum
14.982 13.538 12.020 11.076 10.083 9.024 8.401 8.172 -9.59274740
13.741 12.481 11.074 10.195 9.366 8.378 7.710 7.510 -6.50542581
上面的命令每次在# Isochrone
之前插入两个空行。现在你可以使用gnuplot中的命令:
plot "< sed 's/# Isochrone/\\n\\n# Isochrone/g' file" index 0 u 1:2
注意你需要在gnuplot中转义反斜杠。要获得年龄,您可以在gnuplot中使用类似的方法进行系统调用:
n = 1 # First record
age_1 = system("awk '/Age/{i++}i==" . n . "{print $(NF-1); exit}' file")
print age_1
1.000e+07
或者同时获取所有这些并将它们存储在一个字符串中:
age = ""
do for [n = 1:2] {
age = age . " " . system("awk '/Age/{i++}i==" . n . "{print $(NF-1); exit}' file")
}
print age
1.000e+07 1.122e+07
现在,您可以方便地使用index
的相同索引和标题:
plot for [i=1:2] "< sed 's/# Isochrone/\\n\\n# Isochrone/g' file" \
index (i-1) u 1:2 title "Age = " . word(age,i) . " years"
你在研究恒星中的磁通量吗?