绘图窗口无响应

75
我使用的是64位Windows 7。每次使用plot函数时,绘图窗口会成功显示和绘制,但之后它就停止响应并必须关闭它。
例如:
x = linspace(0,1,10)
y = x.^2
plot(x,y);

奇怪的是,当绘图窗口冻结时,我必须关闭Octave窗口,它们也将变得无响应。如果我不使用绘图函数,这种情况就不会发生。

我不知道原因。这是因为我使用64位版本吗?请告诉我如何解决此问题。

10个回答

132
问题可能是你的 Octave 安装使用的图形工具包。
要检查这个问题,请在 Octave 命令行中输入 "graphics_toolkit"。
如果响应是 "fltk" 并且绘图窗口冻结,则将默认工具包切换为 gnuplot: "graphics_toolkit('gnuplot')"
测试问题是否已经解决: "x=1:10; y=x.^2; plot(x,y)"
在你的 Octave 安装目录中,使更改永久化到你的 octave.rc 文件中。
    On Windows:  \Octave\share\octave\site\m\startup\octaverc
    On Linux:     ~/.octaverc


还是不起作用吗?

  • 如果响应是qt,请尝试使用fltkgnuplot(其中一个可能比另一个更快)。

  • 如果上述方法不起作用,则可能需要安装/重新安装gnuplot。(感谢lukas和saurabh提供此极端案例。)


15
在我的情况下,默认工具包是“qt”,而切换到“fltk”可解决问题(我尝试了“gnuplot”,但它非常慢)。操作系统为Windows 7x64。 - Gerbus
3
在我的情况下,预设的工具包是 "qt"。 "gnuplot" 和 "fltk" 均可使用。操作系统为 Windows 8 x64。 - Vu Anh
2
@AssadEbrahim:你可能需要更新最后提供的链接。谢谢: 在我的情况下,默认值是“qt”。gnuplot运行速度太慢了,“fltk”运行良好!Windows 10 x64;Octave 4.0.0 - Prakhar Agrawal
2
在Linux上,此文件位于~/.octaverc。 - ruX
1
Mac,从Qt切换到Gnuplot并解决我的问题。 - BollMose
显示剩余6条评论

14

正如Assad Ebrahim所写的那样,问题出在工具包上。我在3.8.2版本中遇到了另一个问题:gnuplot根本无法工作。没有绘图窗口出现,我需要关闭Octave。如果有人遇到同样的问题,解决方法是下载gnuplot并将其安装到Octave文件夹中。它会替换旧的gnuplot,新的gnuplot就可以工作。

我感谢你的建议。


1
这正是我遇到的问题,仅将graphisc_toolkit('gnuplot')更改为gnuplot并不能解决问题。但重新安装gnuplot就可以了!感谢您! - Milen Kovachev

13

哦。我的朋友向我展示了这个命令,它很有效:

pkg rebuild -noauto oct2mat

该命令重新安装了软件包,但标记为不在启动时默认加载。这种行为现已更改,Forge软件包的新版本将不会默认加载。

问题在于oct2mat软件包根本不应该被加载。它会掩盖Octave核心的几个函数,导致其表现异常。除非你真的需要这个软件包,否则最好将其删除。

oct2mat的目的是弥补Matlab中缺少的一些函数,并使为Octave编写的代码在Matlab中运行。如果您不需要oct2mat,请将其删除。没有人需要安装所有软件包,实际上这可能会 使您的Octave安装变得更糟糕,就像oct2mat一样。


3
请问,我应该在哪里运行这个命令?我正在使用Ubuntu系统,终端无法识别pkg命令,Octave显示“没有此文件或目录”。 - Martin Drozdik
6
我在Octave 4.0中遇到了同样的问题。我通过在C:\Octave\Octave-4.0.0\share\octave创建一个空目录'packages'来解决它。 - Szymon Knop

11

所以在 Windows 上,这对我有效:

步骤1:将 gnuplot 安装到 C:\Program Files (x86)\gnuplot

下载链接:

https://sourceforge.net/projects/gnuplot/

步骤2:进入以下目录(假设您已将 Octave 安装在 C:\ 根目录下):

C:\Octave\share\octave\site\m\startup

在 Notepad 中打开该目录中的 octaverc 文件。

步骤3:

将以下行添加到文件末尾。

gnuplot_binary 'C:\Program Files (x86)\gnuplot\bin\gnuplot.exe'
graphics_toolkit('gnuplot')

第四步:

保存文件并退出记事本。如果Octave已经打开,请关闭它。

第五步:

打开Octave,并在其中输入以下命令进行检查:

plot([1,2,3],[4,5,6]);

请注意,第一次使用gnuplot可能需要长达5分钟的时间来绘制图形。因此,请不要尝试关闭应用程序。后续简单绘图通常在1秒钟以下就可以完成。


好的解释。谢谢 :) - Jeffin Manuel
4
第五步让我很恼火。为什么需要花费5分钟、5秒甚至5毫秒?这太荒谬了。 - Robert
第五步救了我。+1!只需要这个和graphics_toolkit('gnuplot'),没有其他的。(对我来说不是真的5分钟,只用了30秒钟。) - bogec

8

阿萨德给出的答案是完全正确的,对我也起作用。

这只是一个异常情况。

在Octave命令行中键入:graphics_toolkit

如果答案是qt而不是fltk,那么可能您的电脑需要从SourceForge单独安装gnuplot,因为Octave在W8/10中安装时会出现一些错误。

这里附上链接。https://sourceforge.net/projects/gnuplot/?source=directory

您不需要更改任何安装文件。

这应该可以解决问题。


我也使用Octave-4.0.3得到了“qt”。我必须将gnuplot的标准终端设置为Windows,并将gnuplot_binary `C:\ Program Files(x86)\ gnuplot \ bin \ gnuplot.exe'添加到.octaverc文件中。 - Oliver Zendel
我单独安装了GNU Plot。但问题仍未解决。 - dulaj sanjaya

2

当我第一次尝试绘制一个示例图时,绘图窗口出现了,但需要等待一到两分钟才能响应,然后绘图才显示。随后的绘图则可以立即显示。 操作系统:Windows 7 64位 Octave 4.0.3 64位。


我也遇到了这个问题。看起来在Windows上生成字体缓存需要一些时间:https://stackoverflow.com/a/48247691/597487 - Ramón

0

我在运行你的代码时,使用Octave 4.2出现了类似的症状(无法关闭绘图窗口,绘图需要一些时间才能出现)。当语句没有以分号(;)结尾时,命令和结果将被打印在命令窗口中。在我看来,命令窗口似乎会停止解释代码,并等待用户按下有效键(f、b、q)以继续或中止执行。这个停顿点取决于先前执行的代码和命令窗口的大小,因此这些症状的间歇性。

解决方案:

选项1:转到命令窗口并不断按f(向前)

选项2:使用分号终止语句

x = linspace(0,1,10);
y = x.^2;
plot(x,y);

选项3:调整一些命令窗口设置

希望能有所帮助


0

我在4.0.3版本中遇到了同样的问题,将默认工具包切换为gnuplot(如Assad Ebrahim所说)对我没有用。然后我在Octave for Microsoft Windows中找到了一些东西:

当前Windows版Octave提供的gnuplot不是完整功能的。 因此,您无法使用gnuplot图形工具包的所有功能

并提供了下载和安装gnuplot的说明。希望对您有所帮助。


0
以下是解决在Emacs中运行Octave时绘图窗口冻结的方法,由John Lawrence Aspdenuser2699在问题如何在emacs下使Octave的绘图工作?中提供。这里将其带来是因为这个问题更容易找到。
问题可能是由于Emacs octave-mode的--no-line-editing开关引起的,您可以通过M-x customize-variable RET inferior-octave-startup-args RET并将--no-line-editing更改为--line-editing来解决它。

0

我曾经遇到过同样的问题, 有时候linspace会在命令窗口中显示所有结果并等待您的交互。 在命令后添加;,或在命令窗口中按q退出 x = linspace(0,10,100);

enter image description here

永久解决方案,已编辑

在Octave命令窗口中输入more off以禁用屏幕输出的分页显示。这将防止代码等待直到您看到所有行。

如果您想重新启用此功能,请使用more on

文档

相关问题

如何在Octave命令窗口上防止用户交互

无法停止gui命令窗口中的执行


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