Сюжетные режимы (оболочки) с помощью Matlab / Octave?

Это может быть немного странный вопрос, но в любом случае. Иногда я использую ssh на серверах или лабораторных компьютерах повсюду (на континенте), чтобы проверить вещи, а иногда даже запустить Matlab или Octave для просмотра последних данных и т. Д. Затем, когда мне нужен какой-либо сюжет, веселье начинается. Либо я копирую большой кусок хлама через Интернет на мой компьютер и генерирую сюжет локально. Или, если в предыдущей попытке нет выбора, я запускаю Matlab через ssh и X-forwarding, что просто больно, учитывая низкую пропускную способность и / или высокий пинг.

На самом деле, мне было интересно, есть ли способ создать в оболочке старомодные сюжетные режимы в стиле 1980-х годов, по крайней мере, простые вещи с линиями или точками (без X-forwarding). Наличие "некрасивого" (но крутого?) Сюжетного режима персонажа, по крайней мере, позволило бы мне определить, смотрю ли я, например, на линию, параболу или просто на дерьмо - что может быть невероятно полезным. Я знаю, некоторые вещи могут быть определены умной математикой, но эй, абстрактное мышление переоценено.

Изменить... другой связанный (?) Тег.

2 ответа

Решение

В случае с Octave у вас не должно быть проблем. Я обычно делаю свои вычисления на удаленных машинах через ssh и использую это все время.

Если в качестве графического инструментария у вас есть gnuplot (для справки в будущем, по состоянию на 3.6.2 это по-прежнему значение по умолчанию, но в будущем оно может измениться на fltk), вы получите графики ASCII, если X-дисплей отсутствует.

ASCII график функций cos и sin с метками

Чтобы убедиться, что у вас есть правильный графический инструментарий, просто введите graphics_toolkit по подсказке. Чтобы изменить его на использование gnuplot graphics_toolkit gnuplot,

Хотя есть много частичных ответов на этот вопрос, единственное, что работало для меня в Windows через WSL & Cygwin, было следующее.

  1. Как интерактивная сессия CLI:

# Start the Octave CLI session:
octave-cli.exe -iWq

graphics_toolkit ("gnuplot")
x = -2*pi:2*pi;
y = sin(x);
figure(1,'Visible','off');
plot(y)
print (1, "-ddumb", "dummy"); type -q dummy.txt

Генерация:

    1 |-------------------------------------------------------------|
      |        + ***    +        +       +  ** *  +        +        |
      |        **   *                     **   *                    |
      |       *     *                    *      *                   |
      |       *      *                   *       *                  |
  0.5 |-+    *        *                 *        *                +-|
      |      *        *                 *         *                 |
      |     *          *               *           *                |
      |    *           *               *           *                |
      |    *            *              *            *               |
    0 |-+ *             *             *             *             +-|
      |                  *            *              *              |
      |                  *           *               *              |
      |                   *          *                *             |
      |                   *         *                 *             |
 -0.5 |-+                  *        *                  *        * +-|
      |                    *       *                    *      *    |
      |                     *      *                     *    *     |
      |                     ****  *                      *   *      |
      |        +        +       *+*      +        +       *+*       |
   -1 |-------------------------------------------------------------|
      0        2        4        6       8       10       12       14

К сожалению, это все еще зависит от использования временного файла dummy.txt, Но ужасно плохая документация Octave не дает ни очевидных альтернатив, ни примеров. В конце прочтения непонятной документации вам гораздо лучше понять и угадать следующие смежные вопросы:


  1. Как сценарий CLI сеанса:

$ cat foo.m
#!/usr/bin/env octave

graphics_toolkit ("gnuplot")
setenv GNUTERM dumb
x = -2*pi:2*pi;
y = sin(x);
plot(y)
pause (2);

Затем запустите с: octave-cli foo.m,

  1. Как однострочник:

octave-cli.exe --eval "graphics_toolkit gnuplot;setenv GNUTERM dumb; plot(sin(-2*pi:2*pi)); pause(2)"

Обратите внимание pause требуется, чтобы получить какой-либо вывод!


Если вы ищете другие опции для команды печати (при использовании gnuplot), сделайте следующее:

gnuplot -e "set term"
gnuplot -e "set terminal dumb; plot sin(x);"

Например, в правильно поддерживаемых ANSI xterms вы можете использовать sixel с:

gnuplot -e "set terminal sixelgd; plot sin(x);"

plot Команда (и друзья) используют графические библиотеки Java, которые, очевидно, не работают в текстовом режиме. AFAIK, нет никакого способа обойти эти базовые библиотечные вызовы и перенаправить любой графический вывод на некоторый ASCII-арт переводчик / генератор.

Вы можете попробовать что-то похожее, как предложено здесь:

h = figure('visible', 'off');
plot(h, ...)            
saveas(gcf, 'file.fig') 

а потом scp/rsync file.fig окончен (что-то вроде X-forwarding...).

Конечно, вы можете написать функцию, которая генерирует график, сохраняет его в временном файле (как указано выше), а затем передает этот PNG/JPG/... через генератор ASCII-искусства (или этот), выход которого затем отображается в терминале.

Другие вопросы по тегам