Gnuplot 从单个标签的x计算y

Gnuplot 从单个标签的x计算y,gnuplot,Gnuplot,我想通过只输入x并从数据点计算y,在图形中的某个x位置手动添加标签 e、 g: 所以,我不想在第5行硬编码“33” 可能吗 (我在谷歌上搜索了这个问题,并在输入title.Nada后检查了Stackoverflow可能提供的副本。)方法1(数据扫描) 对于不太大的输入,可以将x/y数据加载到两个单独的数组中,然后定位与给定x值对应的y值: $DATA <<EOD 1 11 2 22 3 33 4 22 5 33 EOD stat $DATA nooutput N = STATS

我想通过只输入x并从数据点计算y,在图形中的某个x位置手动添加标签

e、 g:

所以,我不想在第5行硬编码“33”

可能吗


(我在谷歌上搜索了这个问题,并在输入title.Nada后检查了Stackoverflow可能提供的副本。)

方法1(数据扫描)

对于不太大的输入,可以将x/y数据加载到两个单独的数组中,然后定位与给定x值对应的y值:

$DATA <<EOD
1 11
2 22
3 33
4 22
5 33
EOD

stat $DATA nooutput
N = STATS_records

array data_x[N]
array data_y[N]
stat $DATA u (data_x[1+$0]=$1,data_y[1+$0]=$2,$1):2 nooutput

x0 = 3
y0 = NaN
do for [i=1:N] {
  if (data_x[i] == x0) {
    y0 = data_y[i]
  }
}

set label "test" at x0,y0

plot $DATA using 1:2 with lines t ''
方法3(外部工具)

作为一个更健壮的替代方案,可以通过
系统
调用将此任务委托给在Gnuplot中调用的外部实用程序。示例是使用
gawk
扫描输入数据文件。如果在第一列中找到匹配的值,它将打印相应的y值并退出(以便只报告第一次出现):

方法1(数据扫描)

对于不太大的输入,可以将x/y数据加载到两个单独的数组中,然后定位与给定x值对应的y值:

$DATA <<EOD
1 11
2 22
3 33
4 22
5 33
EOD

stat $DATA nooutput
N = STATS_records

array data_x[N]
array data_y[N]
stat $DATA u (data_x[1+$0]=$1,data_y[1+$0]=$2,$1):2 nooutput

x0 = 3
y0 = NaN
do for [i=1:N] {
  if (data_x[i] == x0) {
    y0 = data_y[i]
  }
}

set label "test" at x0,y0

plot $DATA using 1:2 with lines t ''
方法3(外部工具)

作为一个更健壮的替代方案,可以通过
系统
调用将此任务委托给在Gnuplot中调用的外部实用程序。示例是使用
gawk
扫描输入数据文件。如果在第一列中找到匹配的值,它将打印相应的y值并退出(以便只报告第一次出现):

你说的是“手动”,那么互动式布局可能是一种选择?鼠标单击所需位置将加载变量mouse_X和mouse_Y,然后可以使用这些变量生成标签。发行版中有一个演示“mouselabels.dem”,它可以自动执行此操作,并且可能会提供信息,但实际上您可以这样做

plot FOO      # initial plot with no labels
pause mouse   # wait for mouse click
set label 1 "test" at MOUSE_X, MOUSE_Y
replot        # same plot with a label at the requested position
你说的是“手动”,那么互动式布局可能是一种选择?鼠标单击所需位置将加载变量mouse_X和mouse_Y,然后可以使用这些变量生成标签。发行版中有一个演示“mouselabels.dem”,它可以自动执行此操作,并且可能会提供信息,但实际上您可以这样做

plot FOO      # initial plot with no labels
pause mouse   # wait for mouse click
set label 1 "test" at MOUSE_X, MOUSE_Y
replot        # same plot with a label at the requested position

很好的答案,但它对我不起作用,因为我把我的例子简单化了。实际上,我的x值是timedata,因此对于第一个解决方案,我得到一个“Stats command not available In timedata mode”,第二个解决方案也不起作用,原因很明显。无论如何,我最初的问题得到了正确的回答。感谢您花时间:-)。@nst0022在这种情况下,我想我应该使用一个外部工具来查找y值,并指示Gnuplot通过
系统调用调用它。我举了一个例子。是的,没有问题,也不需要外部工具。我已经阅读了Python中的数据文件,并准备了一些Gnuplot代码,我在
load
中包含了这些代码。关于我的问题,我只是希望有一些gnuplotapi调用来完成这个看似琐碎的任务:-)。答案不错,但它对我不起作用,因为我把我的示例简化了。实际上,我的x值是timedata,因此对于第一个解决方案,我得到一个“Stats command not available In timedata mode”,第二个解决方案也不起作用,原因很明显。无论如何,我最初的问题得到了正确的回答。感谢您花时间:-)。@nst0022在这种情况下,我想我应该使用一个外部工具来查找y值,并指示Gnuplot通过
系统调用调用它。我举了一个例子。是的,没有问题,也不需要外部工具。我已经阅读了Python中的数据文件,并准备了一些Gnuplot代码,我在
load
中包含了这些代码。关于我的问题,我只是希望有一些Gnuplot API调用来完成这个看似琐碎的任务:-)。没有,但是在你的github镜像中有一些有趣的东西:-)。没有,但是在你的github镜像中有一些有趣的东西:-)。
plot FOO      # initial plot with no labels
pause mouse   # wait for mouse click
set label 1 "test" at MOUSE_X, MOUSE_Y
replot        # same plot with a label at the requested position