Octave脚本中的字符模式(shell/ASCII)绘图

4
当在交互式shell会话中运行Octave时,我知道可以显示字符模式/ ASCII图表,如此处所讨论的:Character-mode (shell) plots with Matlab / Octave? 我的问题是,当我的Octave脚本以非交互方式运行时,我希望有这种输出。也就是说,我想运行类似以下命令的东西:
#!/usr/bin/octave -qf

plot(sin(0:7))

并输出类似以下内容:
    1 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      >      +   ---+      +      +      +      +      >
      >      +---    |                                 >
      >     |         |                                >
      >    |           |                               >
  0.5 >+  |             |                             +>
      >   |             |                            | >
      >  |               |                           | >
      > |                 |                         |  >
      >|                   +                       |   >
    0 >+                    |                     |   +>
      >                      |                    |    >
      >                      |                   |     >
      >                       |                 +      >
      >                        |               |       >
      >                         |             |        >
 -0.5 >+                        |            |        +>
      >                          |           |         >
      >                           +---      |          >
      >                               --   |           >
      >      +      +      +      +     -+|     +      >
   -1 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      1      2      3      4      5      6      7      8

如果我在ssh会话中打开octave,然后在octave终端中调用我的脚本,就会得到这样的输出:
octave:1> testplot.m

但是我真正想做的是从其他Bash脚本中调用testplot.m,例如:
$ ./testplot.m

或者

$ octave testplot.m

这两种方式都不会产生任何绘图输出。

我注意到交互式会话输出似乎会根据我的终端窗口的大小自动缩放,所以从某种意义上说,它取决于会话。

谢谢你的帮助!

澄清一下 - 我知道如何创建关闭可见性的图形,但我正在尝试避免单独下载图形文件。

我还发现了这个主题:命令行Unix基于ASCII的图表/绘图工具,但 eplot 似乎给了我错误(可能是用户错误、坏数据格式等,但我不确定),而且我更愿意让事情保持在Octave中 - 只要我处于交互会话中,Octave已经完全符合我的要求!


我认为你想在脚本末尾(plot之后)添加一个 drawnow - Andy
使用 drawnow 或添加 pause 都可以解决我的问题。谢谢! - terikin
1个回答

2
您只需要在Octave脚本的结尾添加一个pause
问题是,您的脚本已经在结尾显示了图形,但程序在调用plot后立即结束,因此程序退出,您甚至没有注意到这个图形。
在下面的图片中,我添加了设置graphics_toolkit和gnuplot终端类型,不是因为它对您的问题有所帮助,而是因为在我的系统上,默认的图形会有所不同。

enter image description here


谢谢!我上周使用了你的解决方案(具体来说,类似于pause(0.1)的东西)。在我看来,drawnow稍微更加优雅一些;有没有使用pause而不是drawnow的原因? - terikin
@terikin 这些函数有不同的作用。pause 没有参数时,会等待直到某些事件发生,这可以防止图形消失。函数 drawnow 会在继续执行之前强制绘制图形(在您的情况下,退出程序)。drawnow 能正常工作的唯一原因是您有终端滚动条。但如果图形在单独的窗口中或者在程序结束后终端窗口关闭了(或者使用了分页器,我不确定),那么您将会看到差异。 - carandraug

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接