8

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

实际上,我想知道是否有一种方法可以在 shell 中生成类似 1980 年代的老式字符模式图,至少是带有线条或点的简单东西(没有 X 转发)。拥有一个“丑陋”(但很酷?)的角色模式情节至少可以让我确定我是在看一条线、一条抛物线还是只是简单的废话——这非常有帮助。我知道,有些东西可以通过聪明的数学来确定,但是,嘿,抽象思维被高估了。

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

4

3 回答 3

8

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

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

带标签的 cos 和 sin 函数的 ASCII 图

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

于 2012-12-06T16:22:40.280 回答
3

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

您可能想尝试此处建议的类似操作:

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

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

您当然可以编写一个生成绘图的函数,将其存储到临时文件(如上),然后将该 PNG/JPG/... 通过ASCII-art 生成器(或这个)传递,其输出为显示在终端中。

于 2012-12-06T15:08:15.560 回答
3

尽管这个问题有很多部分答案,但通过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 文档没有提供任何明显的替代方案,也没有提供示例。在阅读难以理解的文档时,最好通过以下相关问题来解释和猜测:


  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获得任何输出都需要 !


如果您正在寻找 print 命令的其他选项(使用gnuplot时),请执行以下操作:

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

例如,在适当支持的 ANSI xterms 中,您可以将Sixel用于:

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

在此处输入图像描述

于 2019-03-25T22:15:27.287 回答