Gnuplot - нарисуйте вертикальную линию от оси x до графика и от графика до оси y

У меня есть гауссова кривая, нарисованная через gnuplot, и я хочу иметь линию, которая поднимается от оси x, останавливается точно там, где она попадает на кривую, и идет перпендикулярно к левому, чтобы попасть в ось y, в идеале отображая значения на обеих осях и отображение символа, где он пересекает ось х.

Каков правильный способ добавить это в gnuplot? Я пытался играть со стрелками, используя nohead, но я новичок в gnuplot и не могу найти способ добиться того, что мне нужно.

Ответ 1

Мне удалось найти простое решение для моих нужд. arrow можно использовать с nohead, указав координаты y to как функцию самого графика.

Итак, скажем, мы имеем функцию f (x), и мы хотим нарисовать линию от x = 3 до f (3) и соответствующей горизонтальной линии y = f (3), все, что нам нужно сделать, это добавить 2 стрелки:

set arrow from 3,0 to 3,f(3) nohead
set arrow from 0,f(3) to 3,f(3) nohead

Так как я также хотел добавить тики, где линия пересекается с осью, если они отсутствуют, можно было бы сделать:

set xtics add (3 3)
set ytics (f(3) f(3))

Поскольку на оси y могут быть десятичные числа, также может потребоваться сделать что-то вроде этого (в этом случае оно имеет 3 десятичных знака):

set format y "%1.3f"

Мне не удалось найти способ сделать ярлык под тиком по оси x, но это было достаточно для моих нужд. Надеюсь, это поможет кому-то, кто ищет то же самое решение.

Ответ 2

Я решил эту проблему в прошлом следующим образом:

Зная пару (x, y) точки на кривой, на которой вы хотите, чтобы ваши строки вошли, выполните: - вычислить набор значений (x, {0..y}) и построить его. Это будет вертикальная линия - - вычислить набор значений ({0..x}, y) и построить его. Это будет горизонтальная линия

В качестве альтернативы вы можете создать фиктивные массивы a (x, {весь диапазон y) и ({весь диапазон x), y) и нанести их из вашего источника в точку (x, y), указав (x, y) в настройке диапазона.

Возможно, это не самые эффективные способы, но оба работали для меня. Я сделал эти манипуляции в Perl Data Language (PDL), используя Perl script, из которого я пишу файл конфигурации gnuplot и вызываю gnuplot с помощью "системы".

Надеюсь, это поможет!