Как я могу заставить gnuplot показать координаты построенной функции, которые имеют такое же значение x, что и указатель мыши?

Если в gnuplot я набираю plot(x**2) и получаю график этой функции, в нижнем левом углу графика я могу видеть координаты, соответствующие позиции моего указателя мыши.

Я хотел бы знать, есть ли способ "привязать" указатель к графику функции (точнее, перекрестие, координаты которого показаны, что делает их одинаковыми координатами x как указатель мыши).

Конечным эффектом будет то, что при перемещении мыши слева направо по графику перекрестие, которое имеет такое же значение x, что и указатель, будет отображаться непосредственно на графике функции, а текущие координаты этого перекрестье будет напечатано где-нибудь (например, в нижнем левом углу участка). Другими словами, печатные координаты перекрестия всегда были бы (x, f (x)) для некоторого значения x.

Ответ 1

Хотя это было бы полезно для функций (x, f (x)), обратите внимание, что gnuplot также может отображать параметрические функции, а также 2D и 3D поверхности, поэтому эта функциональность будет иметь ограниченное применение. Также обратите внимание, что вы уже можете выводить таблицы с set table и выводить значения на консоль с помощью for и print.

Если вам нужна интерактивность, вот MWE, которая выводит пары (x, f (x)) в соответствии с позицией указателя мыши X, если вы нажимаете на экран, как метку на экране, а также через печать на консоль (удалите при необходимости).

#!/usr/bin/gnuplot -persist

## this binds commands to the mouse click that uses the MOUSE_X variable
## to do what you want
bind all "Button1" \
  'result=sprintf("(x, f(x)) = (%g, %g)", \
  MOUSE_X, f(MOUSE_X)); \
  set label 1 result at graph 0.05, graph 0.05; \
  print result; replot'

f(x) = x**2

plot f(x)
## the pause is needed only to keep gnuplot running,
## so you see the print output
## the label works without the pause
pause mouse