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 .

1 Like

Please, check this post.

1 Like

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…

1 Like

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)