dj_a
dj_a

Reputation: 141

save pyplot figure "as figure" (not as image)

How can I save a figure using PyPlot in Julia, so that the figure can be reloaded as a figure later in Julia? (not as an image)

Upvotes: 2

Views: 267

Answers (1)

Przemyslaw Szufel
Przemyslaw Szufel

Reputation: 42194

You can use serialize to store any Julia object. This beautifully works for plots as well.

Let us start by generating a plot:

using Plots
pyplot()
p = plot(rand(10));
using Serialization
Serialization.serialize("myfile.jld", p);

Note that you need a semicolon after plot command so it does not appear on the screen.

Let us now read the plot (to have a full test I ended the previous Julia session and started a new one):

using Plots
pyplot();
using Serialization
p2 = Serialization.deserialize("myfile.jld");

In order to display it now it is enough to type in REPL:

julia> p2

You might want also want to use plain PyPlot (I strongly recommend Plots for flexibility). In that case your best bet is to follow rules described in object-oriented API of Matplotlib:

using PyPlot
ioff()
fig = subplot()
fig.plot(rand(10))
fig.set_title("Hello world")
using Serialization
serialize("pp.jld", fig)

In order to plot de-serialize back the object:

using PyPlot
ioff()
using Serialization
fig = deserialize("pp.jld")
show()

Finally, note that the serialization is good only for short term storage. If anything changes (e.g. you update Julia packages) you might not be able to de-serialize the plot. Hence another good alternative for processable plots are saving them to LaTeX or SVG format - both is possible in Julia.

Upvotes: 2

Related Questions