Open multiple figure windows using Plots

I would like to use scripts, in the REPL, to display multiple figures from a function. Using PyPlot and plt.figure allows it, but Plots does not seem to have a way of doing so.

My MWE:

using Plots
import PyPlot
plt = PyPlot

function test()
    x = 1:10
    y = rand(10)

    p = plot(title="Sample Plot, does not appear")
    plot!(p, x, y, label="Random Data")
    display(p) # Very weird that this does nothing!

    p2 = plot(title="Another Sample Plot", reuse=false)
    plot!(p2, x.^2, sqrt.(y), label="More Random Data")
    display(p2) # Only this one appears

    nothing
end

function test_plt()
    x = 1:10
    y = rand(10)

    plt.figure()
    plt.plot(x, y, label="Random Data")
    plt.title("Sample Plot with PyPlot")
    plt.legend()

    plt.figure()
    plt.plot(x.^2, sqrt.(y), label="More Random Data")
    plt.title("Another Sample Plot with PyPlot")
    plt.legend()

    nothing
end

test()
test_plt()

This is a backend issue with Plots when using the GRBackend. Depending on OS and perhaps versions, this might work (didn’t for me)

ENV["GKSwstype"] = "100"  # forces GR to use a GUI window
using Plots
gr()  # explicitly set backend

Even setting reuse=false didn’t work for me.

It might work wit the PyPlot backend.

For me this issue is one of the reasons not to use Plots.jl.

I use ControlPlots.jl or GLMakie.jl .

Please, check this post.

The only workaround in GR is to enter Command+F to freeze the window.

So to be clear:

  1. GR does not support multiple windows (is there a plan for this?)
  2. Other backends (pyplot, gaston, …) do - so one must explicitly use them

One might wonder why GR is the default, then…

With the default Plots.jl gr() backend, the following works on Windows, but as indicated above, the new window is a frozen copy:

using Plots; gr()
plot(sin)
# Click on the plot window to make it the main focus.
# Press the 'F' key to freeze the former plot in a new window
plot(cos)

If I understand what you meant, then, the click then press ‘F’ must be done before the next plot command. This seems incompatible with the use “in a script”.

Yes, but if you really want to use the gr() backend, you could try simulating the key presses programmatically using the operating system APIs.