【问题标题】:Plots savefig works at the top level, but not within a function?绘制 savefig 在顶层工作,但不在函数内?
【发布时间】:2018-10-29 12:04:26
【问题描述】:

我正在尝试编写一些命令行 Julia 程序来生成和保存绘图。

这行得通:

#!/usr/bin/env julia
using Plots
pyplot()
plot(1:100,1:100)
savefig("foo.png")

但这不是:

#!/usr/bin/env julia
using Plots
function main(args)
    pyplot()
    plot(1:100,1:100)
    savefig("foo.png")
end
main(ARGS)

失败

ERROR: LoadError: MethodError: no method matching getindex(::PyPlot.Figure, ::Symbol)
The applicable method may be too new: running in world age 21855, while current world is 21864.

请多多指教!

更新 - 感谢所有建议。这是一种解决方法:

#!/usr/bin/env julia
using Plots
function main(args)
    plot(1:100,1:100)
    savefig("foo.png")
end
pyplot()
main(ARGS)

【问题讨论】:

  • 可能是 Plots.jl 中的一个错误,请打开一个问题:github.com/JuliaPlots/Plots.jl/issues(我认为解决方法是将github.com/JuliaPlots/Plots.jl/blob/… 更改为Base.invokelatest(func, plt, fn),但还没有测试。)
  • 要测试的另一件事是将pyplot() 移到函数之外。该函数调用本质上加载了 PyPlot 库,因此在某种意义上等同于 using Package 语句(您不会在本地范围内这样做,实际上这是一个错误),这也可能会解决您的问题.

标签: julia


【解决方案1】:

更新:据我所知,这个问题不应该出现在 Julia v1.0 中

原始答案:这可能更适合评论,但我的字符用完了。

这是Plots 中臭名昭著的“世界时代”问题。这通常在您使用GR 后端而不是PyPlot 时出现,但据我所知,在某些情况下它会影响整个Plots 生态系统。

问题页面已经存在hereherehere(我认为实际上还有一两个)。有几个人正在积极努力解决这个问题,但事实证明要彻底根除它非常棘手。

作为目前的解决方法,尝试在函数外部生成的任何随机绘图上调用savefig然后调用包含您想要执行的绘图的函数。这适用于我的系统,希望它也适用于你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    相关资源
    最近更新 更多