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 с помощью "системы".
Надеюсь, это поможет!