2013-05-24 5 views
10

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

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

ответ

17

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

Итак, давайте скажем, что у нас есть функция 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" 

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

+1

Вы можете добавить метку для tic, используя 'set xtics add (" $ x_1 $ "3)' вместо вместо 'set xtics add (3 3)'. Первое значение - это метка. – Tymric

1

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

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

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

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

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

Смежные вопросы