将 PlotlyJS 图保存为 PNG (Julia)
Saving PlotlyJS plot as PNG (Julia)
我想使用 Julia 将 PlotlyJS 图保存为 PNG,但我不知道如何操作。 PlotlyJS webpage for Julia 声明“要保存图表以供外部查看,您可以使用 savefig(p, filename::String) 方法”。但是,下面的代码:
using PlotlyJS
p = plot(rand(10, 4))
PlotlyJS.savefig(p, filename="myimage.png")
由于“得到不支持的关键字参数”文件名”而导致错误,但使用
PlotlyJS.savefig(p, "myimage.png")
导致“访问未定义的引用”错误:
ERROR: UndefRefError: access to undefined reference
Stacktrace:
[1] getproperty
@ .\Base.jl:42 [inlined]
[2] _kaleido_running
@ C:\Users\apung\.julia\packages\PlotlyBase\NxSlF\src\kaleido.jl:176 [inlined]
[3] _ensure_kaleido_running()
@ PlotlyBase C:\Users\apung\.julia\packages\PlotlyBase\NxSlF\src\kaleido.jl:177
[4] savefig(p::Plot{Vector{GenericTrace}, Layout{Dict{Symbol, Any}}, Vector{PlotlyFrame}}; width::Nothing, height::Nothing, scale::Nothing, format::String)
@ PlotlyBase C:\Users\apung\.julia\packages\PlotlyBase\NxSlF\src\kaleido.jl:84
[5] savefig(io::IOStream, p::Plot{Vector{GenericTrace}, Layout{Dict{Symbol, Any}}, Vector{PlotlyFrame}}; width::Nothing, height::Nothing, scale::Nothing, format::String)
@ PlotlyBase C:\Users\apung\.julia\packages\PlotlyBase\NxSlF\src\kaleido.jl:139
[6] (::PlotlyBase.var"#181#182"{Nothing, Nothing, Nothing, Plot{Vector{GenericTrace}, Layout{Dict{Symbol, Any}}, Vector{PlotlyFrame}}})(f::IOStream)
@ PlotlyBase C:\Users\apung\.julia\packages\PlotlyBase\NxSlF\src\kaleido.jl:171
[7] open(::PlotlyBase.var"#181#182"{Nothing, Nothing, Nothing, Plot{Vector{GenericTrace}, Layout{Dict{Symbol, Any}}, Vector{PlotlyFrame}}}, ::String, ::Vararg{String}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Base .\io.jl:330
[8] open
@ .\io.jl:328 [inlined]
[9] savefig(p::Plot{Vector{GenericTrace}, Layout{Dict{Symbol, Any}}, Vector{PlotlyFrame}}, fn::String; format::Nothing, width::Nothing, height::Nothing, scale::Nothing)
@ PlotlyBase C:\Users\apung\.julia\packages\PlotlyBase\NxSlF\src\kaleido.jl:170
[10] savefig(p::Plot{Vector{GenericTrace}, Layout{Dict{Symbol, Any}}, Vector{PlotlyFrame}}, fn::String)
@ PlotlyBase C:\Users\apung\.julia\packages\PlotlyBase\NxSlF\src\kaleido.jl:165
[11] savefig(p::PlotlyJS.SyncPlot, a::String; k::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ PlotlyJS C:\Users\apung\.julia\packages\PlotlyJS\WF333\src\PlotlyJS.jl:49
[12] savefig(p::PlotlyJS.SyncPlot, a::String)
@ PlotlyJS C:\Users\apung\.julia\packages\PlotlyJS\WF333\src\PlotlyJS.jl:49
[13] top-level scope
@ none:1
我也尝试过定义 PyPlot 图,并通过 PyPlot opening/saving 图像,但这没有成功。
或者,基于 accepted SO answer, I can save the plot as an HTML file, but I still need to convert or save the HTML file to a PNG. A solution to this problem was proposed here,但这仍然感觉很乱。
最终,我想将 PlotlyJS 绘图保存为 PNG 文件。
正如 Oskar 在他的评论中所说,您对当前稳定版本 PlotlyJS 0.18.8 的第二次尝试应该没有问题。
正在做
julia> using PlotlyJS
julia> savefig(plot(rand(10)), "test.png")
导致一个 png 文件被写入我的当前工作目录。
您第一次尝试传递 filename
关键字没有成功,因为正如错误所说,此关键字不存在。使用 REPL 帮助模式查看函数的方法签名很有用(可通过按 ?
访问):
help?> savefig
search: savefig WhosebugError
(...)
savefig(
p::Plot, fn::AbstractString;
format::Union{Nothing,String}=nothing,
width::Union{Nothing,Int}=nothing,
height::Union{Nothing,Int}=nothing,
scale::Union{Nothing,Real}=nothing,
)
Save a plot p to a file named fn. If format is given and is one of png, jpeg, webp, svg, pdf, eps, json, or html; it will be the format of the file. By default the format is guessed from the extension of fn.
scale sets the image scale. width and height set the dimensions, in pixels. Defaults are taken from p.layout, or supplied by plotly
(请注意,为简洁起见,我在这里省略了为 savefig
定义的第一个方法)。
这告诉您您的第二次尝试,即调用 savefig(p, "myimage.png")
是该函数的正确用法以达到您的目的。作为让 Plotly 从文件扩展名猜测所需格式的替代方法,您可以传递 format = "png"
来创建 png 输出。
我想使用 Julia 将 PlotlyJS 图保存为 PNG,但我不知道如何操作。 PlotlyJS webpage for Julia 声明“要保存图表以供外部查看,您可以使用 savefig(p, filename::String) 方法”。但是,下面的代码:
using PlotlyJS
p = plot(rand(10, 4))
PlotlyJS.savefig(p, filename="myimage.png")
由于“得到不支持的关键字参数”文件名”而导致错误,但使用
PlotlyJS.savefig(p, "myimage.png")
导致“访问未定义的引用”错误:
ERROR: UndefRefError: access to undefined reference
Stacktrace:
[1] getproperty
@ .\Base.jl:42 [inlined]
[2] _kaleido_running
@ C:\Users\apung\.julia\packages\PlotlyBase\NxSlF\src\kaleido.jl:176 [inlined]
[3] _ensure_kaleido_running()
@ PlotlyBase C:\Users\apung\.julia\packages\PlotlyBase\NxSlF\src\kaleido.jl:177
[4] savefig(p::Plot{Vector{GenericTrace}, Layout{Dict{Symbol, Any}}, Vector{PlotlyFrame}}; width::Nothing, height::Nothing, scale::Nothing, format::String)
@ PlotlyBase C:\Users\apung\.julia\packages\PlotlyBase\NxSlF\src\kaleido.jl:84
[5] savefig(io::IOStream, p::Plot{Vector{GenericTrace}, Layout{Dict{Symbol, Any}}, Vector{PlotlyFrame}}; width::Nothing, height::Nothing, scale::Nothing, format::String)
@ PlotlyBase C:\Users\apung\.julia\packages\PlotlyBase\NxSlF\src\kaleido.jl:139
[6] (::PlotlyBase.var"#181#182"{Nothing, Nothing, Nothing, Plot{Vector{GenericTrace}, Layout{Dict{Symbol, Any}}, Vector{PlotlyFrame}}})(f::IOStream)
@ PlotlyBase C:\Users\apung\.julia\packages\PlotlyBase\NxSlF\src\kaleido.jl:171
[7] open(::PlotlyBase.var"#181#182"{Nothing, Nothing, Nothing, Plot{Vector{GenericTrace}, Layout{Dict{Symbol, Any}}, Vector{PlotlyFrame}}}, ::String, ::Vararg{String}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Base .\io.jl:330
[8] open
@ .\io.jl:328 [inlined]
[9] savefig(p::Plot{Vector{GenericTrace}, Layout{Dict{Symbol, Any}}, Vector{PlotlyFrame}}, fn::String; format::Nothing, width::Nothing, height::Nothing, scale::Nothing)
@ PlotlyBase C:\Users\apung\.julia\packages\PlotlyBase\NxSlF\src\kaleido.jl:170
[10] savefig(p::Plot{Vector{GenericTrace}, Layout{Dict{Symbol, Any}}, Vector{PlotlyFrame}}, fn::String)
@ PlotlyBase C:\Users\apung\.julia\packages\PlotlyBase\NxSlF\src\kaleido.jl:165
[11] savefig(p::PlotlyJS.SyncPlot, a::String; k::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ PlotlyJS C:\Users\apung\.julia\packages\PlotlyJS\WF333\src\PlotlyJS.jl:49
[12] savefig(p::PlotlyJS.SyncPlot, a::String)
@ PlotlyJS C:\Users\apung\.julia\packages\PlotlyJS\WF333\src\PlotlyJS.jl:49
[13] top-level scope
@ none:1
我也尝试过定义 PyPlot 图,并通过 PyPlot opening/saving 图像,但这没有成功。
或者,基于
最终,我想将 PlotlyJS 绘图保存为 PNG 文件。
正如 Oskar 在他的评论中所说,您对当前稳定版本 PlotlyJS 0.18.8 的第二次尝试应该没有问题。
正在做
julia> using PlotlyJS
julia> savefig(plot(rand(10)), "test.png")
导致一个 png 文件被写入我的当前工作目录。
您第一次尝试传递 filename
关键字没有成功,因为正如错误所说,此关键字不存在。使用 REPL 帮助模式查看函数的方法签名很有用(可通过按 ?
访问):
help?> savefig
search: savefig WhosebugError
(...)
savefig(
p::Plot, fn::AbstractString;
format::Union{Nothing,String}=nothing,
width::Union{Nothing,Int}=nothing,
height::Union{Nothing,Int}=nothing,
scale::Union{Nothing,Real}=nothing,
)
Save a plot p to a file named fn. If format is given and is one of png, jpeg, webp, svg, pdf, eps, json, or html; it will be the format of the file. By default the format is guessed from the extension of fn.
scale sets the image scale. width and height set the dimensions, in pixels. Defaults are taken from p.layout, or supplied by plotly
(请注意,为简洁起见,我在这里省略了为 savefig
定义的第一个方法)。
这告诉您您的第二次尝试,即调用 savefig(p, "myimage.png")
是该函数的正确用法以达到您的目的。作为让 Plotly 从文件扩展名猜测所需格式的替代方法,您可以传递 format = "png"
来创建 png 输出。