我最近开始学习使用Julia,从Matlab / Octave转换。我决定获得一些经验的最好方法是转换一些我已经在使用Octave的代码 - 一个复杂的多维问题的牛顿求解器。我已经能够成功地转换代码(并且相对于Octave有明显的加速,没有开发或其他基于性能的更改),只有一个问题出现。
我选择使用PyPlot进行绘图,因为它与Matlab / Octave的绘图功能相似。但是,PyPlot有一些不受欢迎的行为。我使用绘图函数来显示我试图变为零的向量的当前状态(使用代码的牛顿求解器部分),这样我就可以看到它在做什么,并调整代码以尝试改进这个行为。我在代码停止之前输入要采取的牛顿步数,然后我可以进行调整或重新发出命令以继续尝试收敛。
我已将代码设置为每隔几步绘制当前状态,因此我可以让代码执行200步,但每10步后显示一次状态。在Octave中,这非常有效,为我提供了最新的信息 - 如果代码的行为不合适,我可以使用Ctrl-C快速取消代码(这部分也适用于Julia)。
但是,当使用plot()命令时,Julia不会生成或更新绘图;相反,它会生成绘图,或者如果绘图窗口已经打开,则仅在代码完成时更新它。这完全违背了代码中间歇性绘图的目的。代码完成后,将正确生成绘图,因此我知道plot()命令本身正在正确使用。
我尝试在plot命令后立即添加draw()或show()。我也试过display(gcf())。这些都没有修改结果。我已经确认isinteractive()输出" true"。我也尝试关闭交互性(ioff())并切换是否使用python或julia后端(pygui(true)和pygui(false)),对此行为没有影响。
我错过了什么吗?是否需要设置另一个包或选项以强制PyPlot立即生成当前绘图,而不是等到Julia完成当前代码运行以生成绘图?
或者,范围是否可能导致问题,这里,因为间歇性绘图发生在while循环中?
我正在使用xubuntu 12.10和Julia 0.2.1。
答案 0 :(得分:0)
PyPlot在REPL中默认为此行为。要使它显示绘制的图形,请键入ion()
。要再次将其关闭,请键入ioff()
。
ion()
仅对当前季节有效,因此如果您希望它在会话期间保持不变,只需将其添加到.juliarc文件中。
如果你正在使用iPython ion()
将绘制到一个新窗口,但ioff()
将内联绘制。