О ГНУплоте
GNUPlot это профессиональная система подготовки научной графики, способная если не на всё в мире, то на многое. А самое главное, это просто и даже почти не нужно ей обучаться. Почти, потому что всё-таки пользователю необходимо уметь хотя бы кнопки мышки нажимать.

На рисунке 1 показано классическое поле для построения графиков функции. Чтобы не мучиться и не генерировать пустое поле, вы можете скачать заготовку. Для тех, кому интересно рисовать с помощью гнуплота следует читать статью без пролистывания.
Я не буду учить установке гнуплота и написанию скриптов, «гуглим» gnuplot и качаем для своей системы, если вы новичок в линуксе, но хотите установить гнуплот из «сырцов», то вам на сайт разработчика. Это осознается лишь тогда, когда есть необходимость что-то дописать или изменить. Я себе гнуплот «собирал» вручную.#
Сценарий 1
#!/bin/gnuplot -persist
set terminal svg size 1024, 1024
set output "graph.svg"
set grid
unset border
set xzeroaxis
set xlabel "x" offset 23, 11
set yzeroaxis
set label "y" offset 2, 10.5
set label "0" offset 1,1
set xtics left axis
set ytics right axis
set tics
set key left bottomunset y2zeroxais
set size square
set title "График линейной функции y=x+1"
set xrange [-2:2]
set yrange [-2:2]
set parametric
const = 1
plot '1.csv' using 1:2:3:4 with vectors notitle,
Вообще-то спасибо ему Но я тоже потихоньку становлюсь гиком-дебианщиком.
Я не буду отходить от традиций безопасности и не буду выкладывать готовый файл сценария для GNUplot. Если вам нужно, то открываете текстовый редактор и копируете листинг сценария, затем сохраняете в файл с расширением «gpl».
Два условия: расширение «gpl» заголовок #!/bin/gnuplot -persist
позволяют запускать ваш сценарий двойным кликом мышки. Мне кажется, что проще некуда.
Возвращаемся к нашему сценарию, который написан выше.
Эти две строчки устанавливают программный фильтр и формат файла, в который будет сохраняться изображение:set terminal svg size 1024, 1024 устанавливаем терминал svg с разрешением 1024 на 1024 пикселя
set output "graph.svg" устанавливаем имя файла в котором будем сохранять наш график
Последняя строчка содержит команду plot, которая отдаёт приказ гнуплоту создать наш график.plot '1.csv' using 1:2:3:4 with vectors notitle
Здесь ‘1.csv’ является указанием, где гнуплот возьмет файл данных (об этом чуть ниже), using 1:2:3:4 указывает программе, что она должна брать данные из столбцов 1,2,3,4; with vectors означает, что содержимое файла данных будет изображено в виде векторов (просто линия со стрелочкой), notitle означает, что мы отключим «легенду» графика. Вот и всё. Теперь поговорим о файле данных.
В общем виде файл данных это таблица, в которой по умолчанию первый столбец используется, как данные оси x, второй как y, а третий, как z, если график нам требуется трёхмерный.
Для некоторых случаев существует параметрический режим, например для того чтобы построить окружность (об этом я тоже напишу обязательно) не применяя программирование для создания файла данных.
В принципе, для создания пустого графика с осями со стрелочками можно во внешнем редакторе их добавить, но мы будем его использовать лишь для чистовой «отделки»
Я ссылался на файл 1.csv. Если кому-то непонятно, расширение csv применяется для того, чтобы внешне выделить текстовый файл в качестве таблицы данных. В принципе, никто не запрещает создать таблицу данных в файле с произвольным расширением или без него вовсе. Лишь бы вы сами не запутались. Я предпочитаю использовать то что принято как стандарт.
Приведу листинг файла данных и попонтуюсь, что я это делаю через ssh:

Поскольку это файл данных, содержащий вектора, то формат будет таким:
x0 y0 dx xy
Каждая строка будет описанием вектора где x0, y0 это точка начало вектора, в dx, dy это отклонение вектора по осям абсцисс и ординат.
Первая строка описывает вектор, который будет изображать ось x, вторая строка описывает вектор, который будет изображать ось y соответственно.
Это знание будет удобным, если вам вдруг потребуется создать смещенную ось.
Между столбцами в качестве разделителя применяется либо пробел, либо символ табуляции (что такое служебные символы можно «нагуглить»).
В общем-то база у нас создана, только в результате картинку придётся всё равно доработать в inkscape (на самом деле график можно полностью сгенерировать в GNUPlot, но для этого необходимо доработать сценарий).

Как видно из рисунка 2, я сделал некоторые надписи крупнее и убрал «лишние» нули. Тут дело всё в том, что GNUPlot имеет «широкие» возможности и его лучше использовать в каких-то более конкретных проектах. Однако, знание команд и их синтаксиса со временем сделает пользование программой более эффективным, нежели использование графических надстроек.
Гнуплот, как и Linux позволяет не думать о том, где взять среду для разработки и выполнения, поскольку сами являются таковыми.
Статья начинает затягиваться, поэтому давайте используем нашу заготовку для того, чтобы построить какой-нибудь график.
Мы построим график линейной функции, квадратичную, кубическую, гиперболическую, а также такой случай линейной функции, когда y принимает все значения от -∞ до +∞ ну или x=-(0y+c)/a:

Началась алгебра? Скучно? Не совсем. Есть определённая проблема, так как GNUPlot сам по себе является программой для работы с дискретными данными и это прямо указано в документации, то построение графиков функций, заданных уравнениями доступно в двумерном режиме и изначально только относительно оси абсцисс. Но параметрический режим позволяет добавить к оси y альтернативную ось аргументов. Для этого включают параметрический режим.
set parametric. И здесь опять появляется проблема. После включения параметрического режима невозможно отобразить на графике другие функции, если это необходимо. Так что же делать?
Создаём несложный файл данных для того чтобы построить функцию без использования параметрического режима, для того, чтобы создать файл данных функции x(y)=const мне достаточно поместить следующие данные в таблицу:
x y
1 -2
1 2
И сохраним под именем 2.csv
Теперь модифицируем код сценария:plot '1.csv' using 1:2:3:4 with vectors notitle, '2.csv' with lines title "x(y)", 1.234 title "y(x)"

И получаем сразу два случая линейной функции.
Вот и всё… очень просто.