diff --git a/examples/plotsjl_sample.jmd b/examples/plotsjl_sample.jmd new file mode 100644 index 0000000..bb6cd62 --- /dev/null +++ b/examples/plotsjl_sample.jmd @@ -0,0 +1,82 @@ +% Intro to Weave.jl with Plot.jl +% Matti Pastell +% 20th April 2016 + +# Introduction + +This a sample [Julia](http://julialang.org/) noweb document that can +be executed using [Weave.jl](https://github.com/mpastell/Weave.jl). + +The code is delimited from docs using markdown fenced code blocks +markup which can be seen looking at the source document [gadfly_md_sample.jmd](gadfly_md_sample.jmd) +in the examples directory of the package. The source document can be executed + and the results with Plot.jl plots are captured in the resulting file. + +You can create markdown output or pdf and HTML directly (with Pandoc) using +the weave command as follows: + +```{julia; eval=false} +using Weave +#Markdown +weave(Pkg.dir("Weave","examples","gadfly_md_sample.jmd"), informat="markdown", + out_path = :pwd, doctype = "pandoc") +#HTML +weave(Pkg.dir("Weave","examples","gadfly_md_sample.jmd"), informat="markdown", + out_path = :pwd, doctype = "md2html") +#pdf +weave(Pkg.dir("Weave","examples","gadfly_md_sample.jmd"), informat="markdown", + out_path = :pwd, doctype = "md2pdf") +``` + +*The documents will be written to the Julia working directory when you +use the `out_path = :pwd`.* + +# Capturing code + +The basic code chunk will be run with default options and the code and +output will be captured. + +```julia +using Plots +pyplot() +x = linspace(0, 2*pi) +println(x) +plot(x = x, y = sin(x)) +``` + +```julia; term=true +plot(x = x, y = sin(x)) +``` + + +You can also control the way the results are captured, plot size etc. +using chunk options. Here is an example of a chunk that behaves like a repl. + +```{julia;term=true} +x = 1:10 +d = Dict("Weave" => "testing") +y = [2, 4 ,8] +``` + +```julia +plot(rand(100) / 3,reg=true,fill=(0,:green)) +scatter!(rand(100),markersize=6,c=:orange) +``` + + +You can also for instance hide the code and show only the figure, add a +caption to the figure and make it wider as follows (you can only see the +syntax from the source document): + +```{julia;echo=false; fig_cap="A random walk."; label="random"; fig_width=8; fig_height=4} +plot(y = cumsum(randn(1000, 1))) +``` + +# Whats next + +Read the documentation: + + - stable: + - latest: + +See other examples in: diff --git a/src/plotsjl.jl b/src/plotsjl.jl new file mode 100644 index 0000000..7d4d61a --- /dev/null +++ b/src/plotsjl.jl @@ -0,0 +1,43 @@ + +using Plots + +#Captures figures +function Base.display(report::Report, m::MIME"image/png", data) + + chunk = report.cur_chunk + full_name, rel_name = get_figname(report, chunk) + + docformat = formats[report.formatdict[:doctype]] + push!(report.figures, rel_name) + + report.fignum += 1 + + w = chunk.options[:fig_width] + h = chunk.options[:fig_height] + format = chunk.options[:fig_ext] + dpi = chunk.options[:dpi] + info("Caught a plot") + info(typeof(data)) + savefig(data, full_name) + + #This is probably not the correct way to handle different formats, but it works. + # if format == ".png" + # try + # draw(PNG(full_name, w, h, dpi=dpi), p) + # catch + # draw(PNG(full_name, w, h), p) #Compose < 0.3.1, Gadfly < 0.3.1 + # end + # elseif format == ".pdf" + # draw(PDF(full_name, w, h), p) + # elseif format == ".ps" + # draw(PS(full_name, w, h), p) + # elseif format == ".svg" + # draw(SVG(full_name, w, h), p) + # elseif format == ".js.svg" + # draw(SVGJS(full_name, w, h), p) + # elseif format == ".tex" + # draw(PGF(full_name, w, h, true ), p) + # else: + # warn("Can't save figure. Unsupported format") + # end +end diff --git a/src/run.jl b/src/run.jl index 2797ec1..0cb5b64 100644 --- a/src/run.jl +++ b/src/run.jl @@ -144,6 +144,8 @@ function capture_output(expr::Expr, SandBox::Module, term, plotlib) obj != nothing && display(obj) elseif plotlib == "Gadfly" && typeof(obj) == Gadfly.Plot obj != nothing && display(obj) + elseif plotlib == "Plots" && issubtype(typeof(obj), Plots.Plot) + obj != nothing && display(obj) end finally @@ -248,7 +250,10 @@ function init_plotting(plotlib) elseif l_plotlib == "gadfly" eval(parse("""include(Pkg.dir("Weave","src","gadfly.jl"))""")) rcParams[:plotlib] = "Gadfly" - end + elseif l_plotlib == "plots" + eval(parse("""include(Pkg.dir("Weave","src","plotsjl.jl"))""")) + rcParams[:plotlib] = "Plots" + end end return nothing end