使用Matlab / Octave的字符模式(shell)图?

时间:2012-12-06 14:42:52

标签: matlab shell plot octave ascii-art

这可能是一个有点奇怪的问题,但无论如何。有时候,我在整个地方(大陆)使用ssh进入服务器或实验室计算机以检查内容,有时甚至运行Matlab或Octave以查看最新数据等。然后,当我需要任何类型的情节时,有趣的开始。要么我把一大块可能的垃圾通过互联网复制到我的电脑上并在本地生成情节。或者,如果先前的尝试不可选,我通过ssh和X-forwarding运行Matlab,这在低带宽和/或高ping时是痛苦的。

实际上,我想知道是否有办法在shell中生成老式的20世纪80年代的字符模式图,至少是带有线条或点的简单东西(没有X-forwarding)。有一个“丑陋”(但很酷?)字符模式的情节至少可以让我确定我是否正在看例如一条线,一条抛物线或只是简单的废话 - 这可能是非常有帮助的。我知道,有些东西可以通过聪明的数学来确定,但是嘿,抽象思维被高估了。

编辑...另一个相关的(?)标记。

3 个答案:

答案 0 :(得分:7)

在Octave的情况下你应该没有问题。我通常通过ssh在远程机器上进行计算,并且一直使用它。

只要你有gnuplot作为你的图形工具包(为了将来参考,从3.6.2开始,这仍然是默认值,但将来可能会改为fltk),如果没有X显示,你将得到ASCII图。

ASCII plot of cos and sin functions with labels

要确保拥有正确的图形工具包,只需在提示符下键入graphics_toolkit即可。要将其更改为gnuplot,请使用graphics_toolkit gnuplot

答案 1 :(得分:3)

plot命令(和朋友)使用Java图形库,在纯文本模式下显然不起作用。 AFAIK,没有办法绕过这些底层库调用并将任何图形输出重定向到某些ASCII艺术翻译器/生成器。

您可能想尝试类似于建议的here

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

然后scp/rsync file.fig结束(这有点像X-forwarding真的......)。

您当然可以编写一个生成绘图的函数,将其存储到tempfile(如上所述),然后通过ASCII-art generator(或this one)传递PNG / JPG / ... ,然后输出显示在终端中。

答案 2 :(得分:1)

尽管这个问题有很多部分答案,但是通过 WSL和Cygwin 在Windows上对我有用的唯一事情是

  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 documentation并没有提供任何明显的替代方案,也没有提供示例。在阅读了不起的文档之后,最好通过以下相关问题来解释和猜测自己的方式:


  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 xterm中,可以将 sixel 与以下命令一起使用:

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

enter image description here