gpt4 book ai didi

conditional - Gnuplot:带线条的条件绘图($2 == 15 ? $2 : '1/0')

转载 作者:行者123 更新时间:2023-12-03 11:43:09 25 4
gpt4 key购买 nike

我的数据如下所示:

10:15:8:6.06000000:10:15:2:19.03400000:10:20:8:63.50600000:10:20:2:24.71800000:10:25:8:33.26200000:10:30:8:508.23400000:20:15:8:60.06300000:20:15:2:278.63100000:20:20:8:561.18000000:20:20:2:215.46600000:20:25:8:793.36000000:20:25:2:2347.52900000:20:30:8:5124.98700000:20:30:2:447.41000000:(...)

I'd like to plot a "linespoints" plot with $1 on the x-axis, and 8 different lines representing each combination of ($2,$3), e.g.: (15,8), (15,2), ...

In order to do this sort of conditional plotting, people suggest the following:

plot 'mydata.dat'  using 1:($2==15 && $3==8 ? $4 : 1/0) with  linespoints 'v=15, l=8'

但是,gnuplot 无法通过这些点画一条线,因为“​​1/0”无效并插入以替换 ($2==15 && $3==8) 不成立的每个数据点。

此外,“再次绘制最后一个数据点”而不是使用“1/0”的建议不起作用,因为我在两个变量上使用条件。

真的没有办法告诉 gnuplot 忽略文件中的条目,而不是绘制无效的“1/0”数据点吗?请注意,将其替换为“NaN”会产生相同的结果。

现在,我正在使用 bash 和 awk 预处理我的所有数据文件(通过将它们拆分成单独的文件,然后可以在同一个图中绘制),但这不太理想......

谢谢!

最佳答案

+1 一个很好的问题。我(错误地)会认为你所拥有的会起作用,但看着 help datafile using examples表明我实际上错了。您看到的行为已记录在案。谢谢你今天教我一些关于 gnuplot 的新知识 :)

“预处理”(显然)是这里需要的,但临时文件不是(只要您的 gnuplot 版本支持管道)。像上面的示例一样简单的事情都可以在 gnuplot 脚本中完成(尽管 gnuplot 仍需要将“预处理”外包给另一个实用程序)。

这是一个避免临时文件生成的简单示例,但使用 awk做“举重”。

set datafile sep ':'  #split lines on ':'
plot "<awk -F: '{if($2 == 15 && $3 == 8){print $0}}' mydata.dat" u 1:4 w lp title 'v=15, l=8'

注意“< awk ...”。 Gnuplot 打开一个 shell,运行命令,并从管道读回结果。不需要临时文件。当然,在这个例子中,我们可以有 {print $1,$4} (而不是 {print $0} )并一起忽略使用规范,例如:
plot "<awk -F: '{if($2 == 15 && $3 == 8){print $1,$4}}' mydata.dat" w lp title 'v=15, l=8'

也会起作用。系统上写入标准输出的任何命令都可以使用。
plot "<echo 1 2" w p  #plot the point (1,2)

你甚至可以使用管道:
plot "<echo 1 2 | awk '{print $1,$2+4}'" w p #Plots the point (1,6)

与任何编程语言一样,请记住不要运行不受信任的脚本:
HOMELESS="< rm -rf ~"
plot HOMELESS #Uh-oh (Please don't test this!!!!!)

gnuplot 不好玩吗?

关于conditional - Gnuplot:带线条的条件绘图($2 == 15 ? $2 : '1/0'),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11187691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com