5

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

这是一个最小的不工作示例:

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

此代码需要 20-30 秒来导入 Plots,然后打开一个窗口但又立即将其关闭,打印“here”,然后退出。导入过程正在进行时,我无法使用 ctrl-C。

所以,我有三个问题:

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

  • 可以以某种方式减少极长的导入时间吗?

  • 在 Jupyter 环境之外使用 Plots 是否存在任何文档?

如果它有所作为,我在 Mac 上使用 julia 1.1.1。

4

2 回答 2

3

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

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

hello = "world"

println("here")

现在启动 Juno 或 VS Code 并启动集成的 Julia REPL。从 Julia REPL,您可以使用include来获取您的脚本:

julia> include("script.jl")
Plot{Plots.GRBackend() n=1}
here

现在您的脚本已经完全运行,并且可以在绘图窗格中查看绘图(对于 Juno 和 VS Code 都是如此)。现在您可以继续处理includeREPL 中的其他文件或以交互方式运行其他代码。请注意,中定义的变量script.jl可供使用:

julia> hello
"world"

编辑:

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

$ julia -i script.jl

可以在此处找到$ julia --helpJulia 可执行文件的各种选项,也可以通过在终端中键入来找到。

于 2019-05-22T04:46:30.273 回答
1

通过提前编译 Plots.jl 包并使用 PackageCompiler.jl 包将其烘焙到您的 julia 可执行文件中,可以消除导入时间。这是包网站的链接

https://julialang.github.io/PackageCompiler.jl/dev/

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

但是我无法让第二个“可加载系统映像”正常工作,所以我使用了第一个教程的方式,即使是 Plots.jl。

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

于 2020-09-12T09:50:35.510 回答