我试图在数据文件中绘制一些测量值。以下是数据的简化示例:
1 7 100
1 15 200
1 31 300
2 7 150
2 15 300
2 31 400
如您所见,有三列。第二列应为x轴,第三列包含值。但是,我如何让gnuplot为第一列中的每个不同值创建一个新的图? 上面的例子应该产生两个图,一个叫1,一个叫2。
答案 0 :(得分:3)
至少有两种不同的方法:
1)如果您知道每组的条目数,可以使用every
。下面分别绘制了数据点0到2和3到5(第一个数据点在gnuplot中为零)和上面显示的数据样式:
plot "data" u 2:3 every ::0::2 title "First block", \
"data" u 2:3 every ::3::5 title "Second block"
如果您的数据块方便地用一个空行分隔,可以使用数据块单元而不是数据点来完成:
# Data separated by empty lines:
1 7 100
1 15 200
1 31 300
2 7 150
2 15 300
2 31 400
用以下内容绘制上述内容:
plot "data" u 2:3 every :::0::0 title "First block", \
"data" u 2:3 every :::1::1 title "Second block"
2)如果你不知道你拥有的每种类型的条目数量,你可以使用条件图,告诉gnuplot如果第1列等于1,它应该绘制点,否则应该忽略它(和对于第二个图而言相同,但在这种情况下,第1列必须等于2):
plot "data" u 2:($1 == 1 ? $3 : 1/0) title "First block", \
"data" u 2:($1 == 2 ? $3 : 1/0) title "Second block"
条件构造如下:
$1 == 1 ?
- >第1列是否等于1?
$3 : 1/0
- >如果是,则绘制第3列,否则绘制1/0
,在gnuplot中表示"忽略"数据点