在julia中使用脚本内的plot

在julia中使用脚本内的plot,julia,plots.jl,Julia,Plots.jl,我已经在Jupyter笔记本中制作了一些julia代码的原型,但是它已经超出了笔记本的格式,我想把它放在一个脚本中,以便正确地组织它。但是,我无法确定如何在脚本中使用绘图,也找不到任何关于它的文档 下面是一个最小的不起作用的示例: using Plots gr() display(plot([1,3,2])) println("here") 此代码需要20-30秒来导入绘图,然后打开一个窗口,但立即再次关闭它,打印“此处”,然后退出。导入过程正在进行时,我无法使用ctrl-C 因此,我有三个问

我已经在Jupyter笔记本中制作了一些julia代码的原型,但是它已经超出了笔记本的格式,我想把它放在一个脚本中,以便正确地组织它。但是,我无法确定如何在脚本中使用绘图,也找不到任何关于它的文档

下面是一个最小的不起作用的示例:

using Plots
gr()
display(plot([1,3,2]))
println("here")
此代码需要20-30秒来导入绘图,然后打开一个窗口,但立即再次关闭它,打印“此处”,然后退出。导入过程正在进行时,我无法使用ctrl-C

因此,我有三个问题:

  • 如何防止打印窗口一打开就关闭?我想要的是脚本阻止或(理想情况下)进入一个事件循环,直到窗口关闭,然后在此之后终止

  • 能否以某种方式缩短极长的导入时间

  • 是否有在Jupyter环境之外使用绘图的文档


如果有区别的话,我正在Mac上使用julia 1.1.1。

实现第一个项目中所需工作流的最自然的方法是使用Juno或VS代码。假设在您的工作目录中,文件
script.jl
中有以下代码:

using Plots
gr()
display(plot([1,3,2]))

hello = "world"

println("here")
现在启动Juno或VS代码并启动集成的Julia REPL。在Julia REPL中,您可以使用
include
来获取脚本的源代码:

julia> include("script.jl")
Plot{Plots.GRBackend() n=1}
here
现在,您的脚本已经完全运行,并且可以在绘图窗格中查看绘图(对于Juno和VS代码都是如此)。现在,您可以继续在REPL中包含其他文件,或以交互方式运行其他代码。请注意,
script.jl
中定义的变量可供使用:

julia> hello
"world"
编辑:

如果使用
-i
选项(用于交互式)运行脚本,绘图GUI将保持打开状态,脚本运行完成后将启动REPL:

$julia-i script.jl

Julia可执行文件的各种选项可以是,也可以通过在终端中键入
$Julia--help
来找到。

可以通过提前编译Plots.jl包并使用PackageCompiler.jl包将其烘焙到Julia可执行文件中来消除导入时间。这里有一个到软件包网站的链接

请参阅有关如何执行此操作的教程,第一个教程是关于编译语法高亮显示包的。这将替换默认的“系统映像”。第二个教程是关于在编译Plots.jl的地方创建一个可加载的“sysimage”,并使用这个“sysimage”启动Julia,这样它就不必再次编译Plots.jl

但是,我无法让第二个“可加载的系统映像”正常工作,因此我甚至对Plots.jl使用了第一个教程方法


在这个更改之后,使用plot和plot()基本上是即时的。

我猜您的文件中有上述代码,比如
script.jl
,并且正在调用
$julia script.jl
。绘图GUI似乎仅在julia进程运行时保持打开状态。一旦进程到达脚本末尾,进程将终止,您将丢失GUI。我认为您必须使用
savefig
将绘图保存到文件中,或者通过REPL、Juno或VS代码以交互方式工作。Plots.jl的加载时间过长通常令人遗憾。:)关于您的第三点,您不必做任何特殊的事情来从REPL、Juno或VS代码交互地使用Plots.jl进行绘图。@clbieganek关于第一点,我进行了编辑,以便更清楚地了解我想要的内容。我的希望是复制我当前的Python工作流程,我的脚本在其中进行一些计算,然后弹出一个显示结果的窗口,直到我关闭它。如果这个工作流程不可行,那么很遗憾,Julia目前不是适合我的解决方案。(我不想在笔记本/REPL中运行所有内容,因为这会导致重复性方面的细微问题。)重复性是一个非常值得关注的问题。为了解决这个问题,您可以考虑编写代码作为朱丽亚包并包括单元测试。朱利安风格是编写许多非常简短的函数(“单一责任原则”)。函数越小,就越容易为这些函数添加单元测试。