No chance. I restarted vscode and test it again. I takes a lot of memory. The plot will work but it will consume your machine memory until it crashes. It hapens with the code below:
using Plots, Roots, Random, LinearAlgebra
default(fmt=:png)
Random.seed!()
N = 10^5
data = [[rand(), rand()] for _ in 1:N];
indata = filter((x) -> (norm(x) <= 1), data);
outdata = filter((x) -> (norm(x) > 1), data);
pi_appox = 4 * length(indata) / N;
println("Pi estimate: ", pi_appox);
scatter(first.(indata), last.(indata), c=:blue, ms=1, msw=0);
scatter!(first.(outdata), last.(outdata), c=:red, ms=1, msw=0, xlims=(0, 1), ylims=(0, 1), legend=:none, ratio=:equal)
@jcbritobr, tried your code and confirmed the VS Code plot pane memory hog (Win10). However, it works very smoothly when setting VS code to plot to external window.
NB: your question should probably be split into a separate topic concerning VS Code plots.
1 Like
May you please explain how to plot in external window using vscode? Iāll open a new topic about this and maybe fill another bug in julia vscode.
Well, its another bug. Qt backend is leaking pictures, and I canāt delete them
Iāll stay a while with Pluto, and use vscode only to create packages.
this code worked as workaraund:
p2 = scatter!(first.(outdata), last.(outdata),
xlabel="x", ylabel="y",
c=:red, ms=1, msw=0, xlims=(0, 1), ylims=(0, 1), legend=:none, ratio=:equal);
display("image/png", p2)
1 Like
What do you mean? Running your code above in VS Code using Plots; gr()
shows a single GKS QtTerm window, to which all new plots are sent to.
Iām running in windows 10 64, julia 1.6.3. The Gks window is storing all plots I run. And each time plot is generated, the memory of old plot is not released.
How do I get Gadfly to use PNG rather than SVG?
using Plots: default
default(fmt=:png)
makes no difference, it is still an SVG.
display("image/png", h)
is not supported for Gadfly objects.
Also, itās not true that SVG is inherently slow. If you save the SVG and drag it onto your brower it displays in an instant.
maybe this should be split in a separate conversation, have a look at Backends Ā· Gadfly.jl
1 Like
The Gadfly backends are for writing files. Iām trying to render in VSCode.
Your message didnāt mention VSCode (also, VSCode renders SVG so Iām not sure why youād want to do this in general apart if the SVG is extremely complex and thatās causing issues). Anyway, hereās one way you could do it:
using Fontconfig, Cairo, Gadfly
import Base.show
struct PNGPlot
p::Gadfly.Plot
end
Base.show(io::IO, ::MIME"image/png", pp::PNGPlot) = draw(PNG(io), pp.p)
png(p) = PNGPlot(p)
plot(y=[1,2,3]) |> png
1 Like
Sorry, I thought this thread was about plotting performance in interactive environments which is why I didnāt repeat that information. I have plots that take a minute to display, even after the Gadfly object has been created. Scrolling through plots, saving and deleting them in the plot windows is also very painful. From the discussion above I thought it might be the VSCode handling of SVGs (as I mentioned browsers have no such problem with SVGs). Your elegant and clever code doesnāt improve the initial rendering but does make working with the plots in the plot windows much nicer (and taught me something about Julia).
1 Like