首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >gnuplot条件绘图: plot col : col B if col C == x

gnuplot条件绘图: plot col : col B if col C == x
EN

Stack Overflow用户
提问于 2011-07-04 02:01:12
回答 5查看 56.9K关注 0票数 33

我如何在gnuplot中做到这一点:

代码语言:javascript
复制
plot "test.csv" using 1:2 if value_in_column_3 == 80.0

它应该只选择列3 == 80.0的那些行,而忽略所有其他行(它不应该为其他行绘制0,只需忽略它们)

提前谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-07-04 03:44:35

考虑下面的数据集(1.dat),

代码语言:javascript
复制
1 0.8 0
2 0.6 0
3 0.9 1
4 1.1 0
5 0.7 0
6 0.6 1

我们只想在第三列等于零时绘制前两列。然后你可以试试这个:

代码语言:javascript
复制
plot '1.dat' using 1:($3==0?$2:1/0)

(归功于Gnuplot邮件列表上的markjoe。)

票数 46
EN

Stack Overflow用户

发布于 2012-02-08 03:16:42

如果想要有条件地在包含文本的另一列上绘制:

数据

代码语言:javascript
复制
1 0.8 a
2 0.6 a
3 0.9 a
1 2.1 b
2 1.7 b
3 1.6 b

代码

代码语言:javascript
复制
set terminal postscript color
set xrange [0:4]
set yrange [0:3]
plot "1.dat" using 1:(stringcolumn(3) eq "a"? $2:1/0) title "a" lc rgb "blue" ,\
  "" using 1:(stringcolumn(3) eq "b"? $2:1/0) title "b" lc rgb "red"

命令

代码语言:javascript
复制
gnuplot < 1.par > 1.ps
票数 19
EN

Stack Overflow用户

发布于 2012-08-30 19:59:57

正如chl上面所说的,在gnuplot中要做到这一点的唯一方法是相当复杂的:您必须使用gnuplot的三元?:运算符在您想要从数据集中过滤出的点上生成一个数字错误。

我在这里可能有偏见,因为我是这个项目的作者,但你可能想看看Pyxplot http://www.pyxplot.org.uk (也是免费的和开源的),它是由一群对这种粗糙的语法有点厌倦的gnuplot用户编写的。

它的语法与gnuplot非常相似,但有一些扩展。对于您想要的,您可以在plot命令中指定"select criterion“,并且仅当它测试True时才包含点。有关详细信息,请参阅http://pyxplot.org.uk/current/doc/html/sec-select_modifier.html

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6564561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档