Improvements to Winston support

pull/17/head
Matti Pastell 2014-12-04 16:14:07 +02:00
parent ce1b97ca1d
commit 2b83abd264
4 changed files with 63 additions and 62 deletions

View File

@ -27,7 +27,6 @@ The figures and code can be included in the output.
<<>>=
using Winston
figure()
t = linspace(0, 2*pi, 100)
plot(t, sinc(t))
xlabel("x")
@ -37,6 +36,21 @@ ylabel("sinc(x)")
You can also include a plot with caption and hide the code:
<<echo=false; caption="Random walk."; label="random">>=
figure()
plot(cumsum(randn(1000, 1)))
@
<<>>=
x = linspace(0, 3pi, 100)
c = cos(x)
s = sin(x)
figure()
p = FramedPlot(
title="title!",
xlabel="\\Sigma x^2_i",
ylabel="\\Theta_i")
add(p, FillBetween(x, c, x, s))
add(p, Curve(x, c, color="red"))
add(p, Curve(x, s, color="blue"))
@

View File

@ -1,6 +1,6 @@
module JuliaReport
using Compat
import Base: display
import Base: display, writemime
#Contains report global properties
type Report <: Display
@ -68,7 +68,7 @@ function weave(source ; doctype = "pandoc", plotlib="PyPlot", informat="noweb",
else
l_plotlib = lowercase(plotlib)
if l_plotlib == "winston"
eval(Expr(:using, :Winston))
eval(parse("""include(Pkg.dir("JuliaReport","src","winston.jl"))"""))
rcParams[:plotlib] = "Winston"
elseif l_plotlib == "pyplot"
eval(Expr(:using, :PyPlot))
@ -169,10 +169,10 @@ function run(parsed)
else
chunk[:result] = run_block(chunk[:content])
end
if rcParams[:plotlib] == "Gadfly"
chunk[:fig] && (chunk[:figure] = copy(report.figures))
else
if rcParams[:plotlib] == "PyPlot"
chunk[:fig] && (chunk[:figure] = savefigs(chunk))
else
chunk[:fig] && (chunk[:figure] = copy(report.figures))
end
end
parsed[i] = copy(chunk)
@ -185,10 +185,6 @@ function savefigs(chunk)
l_plotlib = lowercase(rcParams[:plotlib])
if l_plotlib == "pyplot"
return savefigs_pyplot(chunk)
elseif l_plotlib == "winston"
return savefigs_winston(chunk)
elseif l_plotlib == "gadfly"
return String[]
end
end
@ -210,34 +206,6 @@ function savefigs_pyplot(chunk)
return fignames
end
#This currently only works if there is only one figure/chunk
#Doesn"t work with FramedPlots
#Doesn"t work with Julia 0.4
function savefigs_winston(chunk)
fignames = String[]
ext = report.formatdict[:figfmt]
figpath = joinpath(report.cwd, report.figdir)
isdir(figpath) || mkdir(figpath)
chunkid = chunk[:name] == nothing ? chunk[:number] : chunk[:name]
#println(Winston._display.figs)
#println(Winston._display.fig_order)
#Iterate over all open figures, save them and store names
for fig = copy(Winston._display.fig_order)
full_name = joinpath(report.cwd, report.figdir, "$(report.basename)_$(chunkid)_$fig$ext")
rel_name = "$(report.figdir)/$(report.basename)_$(chunkid)_$fig$ext" #Relative path is used in output
#@show rel_name
#figure(fig) #Calling figure clears the canvas!
#savefig(Winston._display.figs[gcf()].plot, full_name) #Produces empty figures
savefig(full_name)
closefig()
push!(fignames, rel_name)
end
return fignames
end
function display(report::Report, m::MIME"text/plain", data)
@ -246,7 +214,18 @@ function display(report::Report, m::MIME"text/plain", data)
push!(report.executed, s)
end
function get_figname(report::Report, chunk)
figpath = joinpath(report.cwd, report.figdir)
isdir(figpath) || mkdir(figpath)
ext = report.formatdict[:figfmt]
fig = report.fignum
chunk = report.cur_chunk
chunkid = (chunk[:name] == nothing) ? chunk[:number] : chunk[:name]
full_name = joinpath(report.cwd, report.figdir, "$(report.basename)_$(chunkid)_$fig$ext")
rel_name = "$(report.figdir)/$(report.basename)_$(chunkid)_$fig$ext" #Relative path is used in output
return full_name, rel_name
end
export weave

View File

@ -1,29 +1,15 @@
using Gadfly
import Base: start, next, done, display, writemime
Gadfly.set_default_plot_format(:png)
function display(doc::Report, m::MIME"image/png", data)
figpath = joinpath(report.cwd, report.figdir)
isdir(figpath) || mkdir(figpath)
ext = report.formatdict[:figfmt]
fig = doc.fignum
#Captures figures
function display(report::Report, m::MIME"image/png", data)
chunk = report.cur_chunk
chunkid = (chunk[:name] == nothing) ? chunk[:number] : chunk[:name]
full_name = joinpath(report.cwd, report.figdir, "$(report.basename)_$(chunkid)_$fig$ext")
rel_name = "$(report.figdir)/$(report.basename)_$(chunkid)_$fig$ext" #Relative path is used in output
full_name, rel_name = get_figname(report, chunk)
docformat = formats[report.formatdict[:doctype]]
#Add to results for term chunks and store otherwise
if chunk[:term]
chunk[:figure] = [rel_name]
report.cur_result *= "\n" * report.formatdict[:codeend]
@ -31,14 +17,11 @@ function display(doc::Report, m::MIME"image/png", data)
report.cur_result *= "\n\n" * report.formatdict[:codestart]
chunk[:figure] = String[]
else
push!(doc.figures, rel_name)
push!(report.figures, rel_name)
end
doc.fignum += 1
report.fignum += 1
out = open(full_name, "w")
writemime(out, m, data)
close(out)
#push!(doc.executed, filename)
end

25
src/winston.jl Normal file
View File

@ -0,0 +1,25 @@
using Winston
function 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]]
#Add to results for term chunks and store otherwise
if chunk[:term]
chunk[:figure] = [rel_name]
report.cur_result *= "\n" * report.formatdict[:codeend]
report.cur_result *= formatfigures(chunk, docformat)
report.cur_result *= "\n\n" * report.formatdict[:codestart]
chunk[:figure] = String[]
else
push!(report.figures, rel_name)
end
report.fignum += 1
out = open(full_name, "w")
writemime(out, m, data)
close(out)
end