From a68ec9b19174f167c5d82a8256aecfdd2779251e Mon Sep 17 00:00:00 2001 From: Thomas Breloff Date: Mon, 28 Sep 2015 16:42:02 -0400 Subject: [PATCH] savefig and png --- docs/example_generation.jl | 2 +- examples/playground.ipynb | 7 ++++- src/Plots.jl | 58 ++++++++++++++++++++++++++++++++++---- 3 files changed, 60 insertions(+), 7 deletions(-) diff --git a/docs/example_generation.jl b/docs/example_generation.jl index b2ea6765..08d11dcf 100644 --- a/docs/example_generation.jl +++ b/docs/example_generation.jl @@ -140,7 +140,7 @@ function generate_markdown(pkgname::Symbol) imgname = "$(pkgname)_example_$i.png" # NOTE: uncomment this to overwrite the images as well - savepng("$IMGDIR/$pkgname/$imgname") + png("$IMGDIR/$pkgname/$imgname") # write out the header, description, code block, and image link write(md, "### $(example.header)\n\n") diff --git a/examples/playground.ipynb b/examples/playground.ipynb index 90664b35..b421800d 100644 --- a/examples/playground.ipynb +++ b/examples/playground.ipynb @@ -340,7 +340,12 @@ } ], "source": [ - "?sort" + "using Plots\n", + "plot(rand(10))\n", + "png(\"tmp\") # saves as \"tmp.png\"\n", + "png(\"tmp.png\") # saves as \"tmp.png\"\n", + "savefig(\"tmp\") # error... can't extract extension\n", + "savefig(\"tmp.png\") # saves as \"tmp.png\"" ] }, { diff --git a/src/Plots.jl b/src/Plots.jl index e387035a..ec700b17 100644 --- a/src/Plots.jl +++ b/src/Plots.jl @@ -42,7 +42,8 @@ export yticks!, annotate!, - savepng, + savefig, + png, gui, backend, @@ -116,19 +117,66 @@ annotate!(plt::Plot, anns) = plot!(plt; annotation = # --------------------------------------------------------- +function getExtension(fn::AbstractString) + pieces = split(fn, ".") + if length(pieces) < 2 + error("Can't extract file extension: ", fn) + end + pieces[end] +end -savepng(args...; kw...) = savepng(current(), args...; kw...) -savepng(plt::PlottingObject, fn::AbstractString; kw...) = (io = open(fn, "w"); writemime(io, MIME("image/png"), plt); close(io)) -# savepng(plt::PlottingObject, args...; kw...) = savepng(plt.backend, plt, args...; kw...) -# savepng(::PlottingPackage, plt::PlottingObject, fn::AbstractString, args...) = error("unsupported") # fallback so multiple dispatch doesn't get confused if it's missing +function addExtension(fn::AbstractString, ext::AbstractString) + try + oldext = getExtension(fn) + if oldext == ext + return fn + else + return "$fn.$ext" + end + catch + return "$fn.$ext" + end +end +function png(plt::PlottingObject, fn::AbstractString) + fn = addExtension(fn, "png") + io = open(fn, "w") + writemime(io, MIME("image/png"), plt) + close(io) +end +png(fn::AbstractString) = png(current(), fn) + + +const _savemap = Dict( + "png" => png, + ) + +function savefig(plt::PlottingObject, fn::AbstractString) + ext = getExtension(fn) + func = get(_savemap, ext) do + error("Unsupported extension $ext with filename ", fn) + end + func(plt, fn) +end +savefig(fn::AbstractString) = savefig(current(), fn) + + +# savepng(args...; kw...) = savepng(current(), args...; kw...) +# savepng(plt::PlottingObject, fn::AbstractString; kw...) = (io = open(fn, "w"); writemime(io, MIME("image/png"), plt); close(io)) + + + + +# --------------------------------------------------------- + gui(plt::PlottingObject = current()) = display(PlotsDisplay(), plt) # override the REPL display to open a gui window Base.display(::Base.REPL.REPLDisplay, ::MIME"text/plain", plt::PlottingObject) = gui(plt) +# --------------------------------------------------------- function __init__()