gnuplot可以分割数据吗?
我有以下格式的一些数据:gnuplot可以分割数据吗?,gnuplot,Gnuplot,我有以下格式的一些数据: 10.0 1 a 2 10.2 2 b 2 10.4 3 a 2 10.6 4 b 2 10.8 4 c 10 11.0 4 c 20 。。。其中第三列基本上表示属于“单独”数据集;所以我想展示,比如说,那些属于红色“a”的样本,那些属于蓝色“b”的样本等等(使用gnuplotversion4.4patchlevel2) 我设法将“示例”样式作为“脉冲”和“点”样式的混合;via设法采用了不同的颜色——这就是我取得的成绩(): 。。。然后可以“单独”绘制出来——但我想
10.0 1 a 2
10.2 2 b 2
10.4 3 a 2
10.6 4 b 2
10.8 4 c 10
11.0 4 c 20
。。。其中第三列基本上表示属于“单独”数据集;所以我想展示,比如说,那些属于红色“a”的样本,那些属于蓝色“b”的样本等等(使用gnuplot
version4.4patchlevel2)
我设法将“示例”样式作为“脉冲
”和“点
”样式的混合;via设法采用了不同的颜色——这就是我取得的成绩():
。。。然后可以“单独”绘制出来——但我想知道gnuplot
是否有这样的内部设施
提前感谢您的回答,干杯 PS:一些对我有用的链接:
wxt
输出-其他终端,如png
或pdfcairo
将完全混乱地呈现方框/标签(需要手动调整) 你可以用awk来做这个。我不知道我是否会称之为gnuplot的“一些内部设施”,但我认为它做了您希望它做的事情:
使用数据文件data.csv:
10.0 1 a 2
10.2 2 b 2
10.4 3 a 2
10.6 4 b 2
10.8 4 c 10
11.0 4 c 20
用图形绘制数据
plot "<awk '{if($3 == \"a\") print $1,$2}' Data.csv" u ($1 - 10):2 w lp, \
"<awk '{if($3 == \"b\") print $1,$2}' Data.csv" u ($1 - 10):2 w lp, \
"<awk '{if($3 == \"c\") print $1,$2}' Data.csv" u ($1 - 10):2 w lp
plot”你可以用awk来做这件事。我不知道我是否会称之为gnuplot的“一些内部设施”,但我认为它做了你希望它做的事情:
使用数据文件data.csv:
10.0 1 a 2
10.2 2 b 2
10.4 3 a 2
10.6 4 b 2
10.8 4 c 10
11.0 4 c 20
用图形绘制数据
plot "<awk '{if($3 == \"a\") print $1,$2}' Data.csv" u ($1 - 10):2 w lp, \
"<awk '{if($3 == \"b\") print $1,$2}' Data.csv" u ($1 - 10):2 w lp, \
"<awk '{if($3 == \"c\") print $1,$2}' Data.csv" u ($1 - 10):2 w lp
绘图“这是可能的。Gnuplot有一个三元运算符,如C中的。Gnuplot还将忽略未定义的表达式,例如负数的对数或除以零。把这些放在一起,您可以通过为那些不满足条件的线生成无效数字,从而只绘制那些满足某些特定条件的线。将问题简化一点,方法如下所示:
plot "inline.dat" using (strcol(3) eq 'a' ? $1 : 1/0):2
这是可能的。Gnuplot有一个三元运算符,如C中的。Gnuplot还将忽略未定义的表达式,例如负数的对数或除以零。把这些放在一起,您可以通过为那些不满足条件的线生成无效数字,从而只绘制那些满足某些特定条件的线。将问题简化一点,方法如下所示:
plot "inline.dat" using (strcol(3) eq 'a' ? $1 : 1/0):2
太棒了——非常感谢你的回答,@Michael J.Barber;这看起来正是我要找的。干杯请注意:带有1/0
的条件绘图将干扰行
或行点
渲染;在这种情况下,必须调用外部程序-在@sdaau中讨论过,对于使用行
或行点
进行条件打印,不需要(或曾经需要)外部程序。甚至不适用于gnuplot 4.4或4.6。这里有一个简单的解决方法——非常感谢你的回答,@Michael J.Barber;这看起来正是我要找的。干杯请注意:带有1/0
的条件绘图将干扰行
或行点
渲染;在这种情况下,必须调用外部程序-在@sdaau中讨论过,对于使用行
或行点
进行条件打印,不需要(或曾经需要)外部程序。甚至不适用于gnuplot 4.4或4.6。有一个简单的解决方法,非常感谢@Woltan-另一种方法是使用类似的东西调用shell!grep“a”inline.dat>a.dat
;然后使用各自的表格进行单独显示;但是我认为《代码》GNUTRAG/<代码>三元操作符的使用方式是“原生”的方式。干杯@似乎有很多解决这个“问题”的方法。和往常一样,你选择哪一个取决于你的品味。但我发现,为了不绘制点而生成无效数字有点尴尬。但这又是一个品味的问题^^你是对的;但当我说“native”时,我只是指该解决方案不涉及系统/shell调用(即使它不是最佳策略)。。。干杯非常感谢@Woltan-另一种方法是使用类似的东西调用shell!grep“a”inline.dat>a.dat
;然后使用各自的表格进行单独显示;但是我认为《代码》GNUTRAG/<代码>三元操作符的使用方式是“原生”的方式。干杯@似乎有很多解决这个“问题”的方法。和往常一样,你选择哪一个取决于你的品味。但我发现,为了不绘制点而生成无效数字有点尴尬。但这又是一个品味的问题^^你是对的;但当我说“native”时,我只是指该解决方案不涉及系统/shell调用(即使它不是最佳策略)。。。干杯