Сюжетные режимы (оболочки) с помощью Matlab / Octave?
Это может быть немного странный вопрос, но в любом случае. Иногда я использую ssh на серверах или лабораторных компьютерах повсюду (на континенте), чтобы проверить вещи, а иногда даже запустить Matlab или Octave для просмотра последних данных и т. Д. Затем, когда мне нужен какой-либо сюжет, веселье начинается. Либо я копирую большой кусок хлама через Интернет на мой компьютер и генерирую сюжет локально. Или, если в предыдущей попытке нет выбора, я запускаю Matlab через ssh и X-forwarding, что просто больно, учитывая низкую пропускную способность и / или высокий пинг.
На самом деле, мне было интересно, есть ли способ создать в оболочке старомодные сюжетные режимы в стиле 1980-х годов, по крайней мере, простые вещи с линиями или точками (без X-forwarding). Наличие "некрасивого" (но крутого?) Сюжетного режима персонажа, по крайней мере, позволило бы мне определить, смотрю ли я, например, на линию, параболу или просто на дерьмо - что может быть невероятно полезным. Я знаю, некоторые вещи могут быть определены умной математикой, но эй, абстрактное мышление переоценено.
Изменить... другой связанный (?) Тег.
2 ответа
В случае с Octave у вас не должно быть проблем. Я обычно делаю свои вычисления на удаленных машинах через ssh и использую это все время.
Если в качестве графического инструментария у вас есть gnuplot (для справки в будущем, по состоянию на 3.6.2 это по-прежнему значение по умолчанию, но в будущем оно может измениться на fltk), вы получите графики ASCII, если X-дисплей отсутствует.
Чтобы убедиться, что у вас есть правильный графический инструментарий, просто введите graphics_toolkit
по подсказке. Чтобы изменить его на использование gnuplot graphics_toolkit gnuplot
,
Хотя есть много частичных ответов на этот вопрос, единственное, что работало для меня в Windows через WSL & Cygwin, было следующее.
Как интерактивная сессия 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 не дает ни очевидных альтернатив, ни примеров. В конце прочтения непонятной документации вам гораздо лучше понять и угадать следующие смежные вопросы:
- Сюжетные режимы (shell/ASCII) с использованием скриптов Octave
- Сюжетные режимы (оболочки) с помощью Matlab / Octave?
- Получение октавы для построения графика при вызове функции из командной строки
- Командная строка Unix ASCII-инструмент для построения графиков
- Распечатать график в октаве в фоновом режиме
Как сценарий 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
,
Как однострочник:
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-искусства (или этот), выход которого затем отображается в терминале.