JuliaPlots / PlotlyJS.jl

Julia library for plotting with plotly.js
Other
418 stars 77 forks source link

PlotlyJS.savefig (v0.18.8) not working on M1 mac running Julia 1.7-1.9 (arm64) #424

Open truedichotomy opened 2 years ago

truedichotomy commented 2 years ago

When I tried to save a jpeg figure using PlotlyJS, it fails on M1 mac running Julia v1.7. The same example runs fine on a Intel mac:

using PlotlyJS

function linescatter1()
    trace1 = scatter(;x=1:4, y=[10, 15, 13, 17], mode="markers")
    plot([trace1])
end
linescatter1()

testio = open("test.jpg", "w")
PlotlyJS.savefig(testio, linescatter1(); format="jpeg");
close(testio)

The error output is:

julia> PlotlyJS.savefig(testio, linescatter1(); format="jpeg");
┌ Warning: Kaleido is not available on this system. Julia will be unable to save images of any plots.
└ @ PlotlyJS ~/.julia/packages/PlotlyJS/4jzLr/src/kaleido.jl:65
┌ Warning: UndefVarError(:artifact_dir)
└ @ PlotlyJS ~/.julia/packages/PlotlyJS/4jzLr/src/kaleido.jl:66
ERROR: UndefRefError: access to undefined reference
Stacktrace:
 [1] getproperty
   @ ./Base.jl:42 [inlined]
 [2] savefig(p::Plot{Vector{GenericTrace{Dict{Symbol, Any}}}, Layout{Dict{Symbol, Any}}, Vector{PlotlyFrame}}; width::Nothing, height::Nothing, scale::Nothing, format::String)
   @ PlotlyJS ~/.julia/packages/PlotlyJS/4jzLr/src/kaleido.jl:98
 [3] savefig(p::PlotlyJS.SyncPlot; kwargs::Base.Pairs{Symbol, Union{Nothing, String}, NTuple{4, Symbol}, NamedTuple{(:width, :height, :scale, :format), Tuple{Nothing, Nothing, Nothing, String}}})
   @ PlotlyJS ~/.julia/packages/PlotlyJS/4jzLr/src/kaleido.jl:71
 [4] savefig(io::IOStream, p::PlotlyJS.SyncPlot; width::Nothing, height::Nothing, scale::Nothing, format::String)
   @ PlotlyJS ~/.julia/packages/PlotlyJS/4jzLr/src/kaleido.jl:154
 [5] top-level scope
   @ REPL[29]:1
julia> versioninfo()
Julia Version 1.7.0
Commit 3bf9d17731 (2021-11-30 12:12 UTC)
Platform Info:
  OS: macOS (arm64-apple-darwin21.1.0)
  CPU: Apple M1
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-12.0.1 (ORCJIT, cyclone)
moinmoti commented 2 years ago

Same issue. Waiting for Kaleido Julia-wrapper to be updated. Kaleido itself released the arm64 version months ago, so it should be stable enough to be ported.

feizhanxia commented 2 years ago

Same issue.

truedichotomy commented 2 years ago

It doesn't look like anyone is working on this issue. It has persisted onto Julia v1.9 master. Given Apple Silicon has been on the market for over 2 years now and Julia 1.8 and 1.9 support for the arm64 macOS has become much more stable than 1.7, it would be nice to have PlotlyJS be able to save figures on this platform. What's needed to make that happen?