diff --git a/docs/example_generation.jl b/docs/example_generation.jl index 604256b8..a8f229cf 100644 --- a/docs/example_generation.jl +++ b/docs/example_generation.jl @@ -90,7 +90,7 @@ function generate_markdown(pkgname::Symbol) # set up the plotter, and don't show the plots by default plotter!(pkgname) - plotDefault!(:show, false) + # plotDefault!(:show, false) # mkdir if necessary try @@ -131,8 +131,8 @@ end # run it! # note: generate separately so it's easy to comment out -# generate_markdown(:qwt) -# generate_markdown(:gadfly) +generate_markdown(:qwt) +generate_markdown(:gadfly) # @osx_only generate_markdown(:unicodeplots) # generate_markdown(:pyplot) generate_markdown(:immerse) diff --git a/docs/gadfly_examples.md b/docs/gadfly_examples.md index 3daf3c55..44962fa6 100644 --- a/docs/gadfly_examples.md +++ b/docs/gadfly_examples.md @@ -33,7 +33,7 @@ plot([sin,cos],0,4π) Or make a parametric plot with plot(fx, fy, umin, umax). ```julia -plot(sin,(x->begin # /Users/tom/.julia/v0.4/Plots/docs/example_generation.jl, line 33: +plot(sin,(x->begin # /home/tom/.julia/v0.4/Plots/docs/example_generation.jl, line 33: sin(2x) end),0,2π) ``` @@ -72,6 +72,16 @@ plot(Vector[rand(10),rand(20)]; marker=:ellipse,markersize=8,colors=[:red,:blue] ![](../img/gadfly/gadfly_example_7.png) +### Build plot in pieces + +Start with a base plot... + +```julia +plot(rand(100) / 3; reg=true,fillto=0) +``` + +![](../img/gadfly/gadfly_example_8.png) + ### and add to it later. diff --git a/docs/qwt_examples.md b/docs/qwt_examples.md index 95f42fdd..eb924450 100644 --- a/docs/qwt_examples.md +++ b/docs/qwt_examples.md @@ -33,7 +33,7 @@ plot([sin,cos],0,4π) Or make a parametric plot with plot(fx, fy, umin, umax). ```julia -plot(sin,(x->begin # /Users/tom/.julia/v0.4/Plots/docs/example_generation.jl, line 33: +plot(sin,(x->begin # /home/tom/.julia/v0.4/Plots/docs/example_generation.jl, line 33: sin(2x) end),0,2π) ``` diff --git a/img/gadfly/gadfly_example_1.png b/img/gadfly/gadfly_example_1.png index 6e704315..b27588eb 100644 Binary files a/img/gadfly/gadfly_example_1.png and b/img/gadfly/gadfly_example_1.png differ diff --git a/img/gadfly/gadfly_example_10.png b/img/gadfly/gadfly_example_10.png index edd54ba6..db389d6d 100644 Binary files a/img/gadfly/gadfly_example_10.png and b/img/gadfly/gadfly_example_10.png differ diff --git a/img/gadfly/gadfly_example_11.png b/img/gadfly/gadfly_example_11.png index 5382c68c..322400a3 100644 Binary files a/img/gadfly/gadfly_example_11.png and b/img/gadfly/gadfly_example_11.png differ diff --git a/img/gadfly/gadfly_example_12.png b/img/gadfly/gadfly_example_12.png index 0e107134..6941ccb8 100644 Binary files a/img/gadfly/gadfly_example_12.png and b/img/gadfly/gadfly_example_12.png differ diff --git a/img/gadfly/gadfly_example_13.png b/img/gadfly/gadfly_example_13.png index 560918c3..b9f27010 100644 Binary files a/img/gadfly/gadfly_example_13.png and b/img/gadfly/gadfly_example_13.png differ diff --git a/img/gadfly/gadfly_example_14.png b/img/gadfly/gadfly_example_14.png index 0724daed..7f4e8dc7 100644 Binary files a/img/gadfly/gadfly_example_14.png and b/img/gadfly/gadfly_example_14.png differ diff --git a/img/gadfly/gadfly_example_15.png b/img/gadfly/gadfly_example_15.png index f9ff455c..29052f1b 100644 Binary files a/img/gadfly/gadfly_example_15.png and b/img/gadfly/gadfly_example_15.png differ diff --git a/img/gadfly/gadfly_example_16.png b/img/gadfly/gadfly_example_16.png index 1975d7ec..f9cd1396 100644 Binary files a/img/gadfly/gadfly_example_16.png and b/img/gadfly/gadfly_example_16.png differ diff --git a/img/gadfly/gadfly_example_17.png b/img/gadfly/gadfly_example_17.png index f853f3c7..e541d809 100644 Binary files a/img/gadfly/gadfly_example_17.png and b/img/gadfly/gadfly_example_17.png differ diff --git a/img/gadfly/gadfly_example_18.png b/img/gadfly/gadfly_example_18.png index 80f72d22..e541d809 100644 Binary files a/img/gadfly/gadfly_example_18.png and b/img/gadfly/gadfly_example_18.png differ diff --git a/img/gadfly/gadfly_example_2.png b/img/gadfly/gadfly_example_2.png index efa14361..28515e94 100644 Binary files a/img/gadfly/gadfly_example_2.png and b/img/gadfly/gadfly_example_2.png differ diff --git a/img/gadfly/gadfly_example_3.png b/img/gadfly/gadfly_example_3.png index 6c59403e..d137d591 100644 Binary files a/img/gadfly/gadfly_example_3.png and b/img/gadfly/gadfly_example_3.png differ diff --git a/img/gadfly/gadfly_example_4.png b/img/gadfly/gadfly_example_4.png index fb8a5a3f..c995d521 100644 Binary files a/img/gadfly/gadfly_example_4.png and b/img/gadfly/gadfly_example_4.png differ diff --git a/img/gadfly/gadfly_example_5.png b/img/gadfly/gadfly_example_5.png index 20d89f08..af516776 100644 Binary files a/img/gadfly/gadfly_example_5.png and b/img/gadfly/gadfly_example_5.png differ diff --git a/img/gadfly/gadfly_example_6.png b/img/gadfly/gadfly_example_6.png index 5a03ba9a..bdf8813f 100644 Binary files a/img/gadfly/gadfly_example_6.png and b/img/gadfly/gadfly_example_6.png differ diff --git a/img/gadfly/gadfly_example_7.png b/img/gadfly/gadfly_example_7.png index 8f762113..172bc7d5 100644 Binary files a/img/gadfly/gadfly_example_7.png and b/img/gadfly/gadfly_example_7.png differ diff --git a/img/gadfly/gadfly_example_8.png b/img/gadfly/gadfly_example_8.png index e69de29b..8787e778 100644 Binary files a/img/gadfly/gadfly_example_8.png and b/img/gadfly/gadfly_example_8.png differ diff --git a/img/gadfly/gadfly_example_9.png b/img/gadfly/gadfly_example_9.png index 94869099..dc0d282e 100644 Binary files a/img/gadfly/gadfly_example_9.png and b/img/gadfly/gadfly_example_9.png differ diff --git a/img/immerse/immerse_example_1.png b/img/immerse/immerse_example_1.png index e9955996..afe99f92 100644 Binary files a/img/immerse/immerse_example_1.png and b/img/immerse/immerse_example_1.png differ diff --git a/img/immerse/immerse_example_10.png b/img/immerse/immerse_example_10.png index c76f8757..b0f10744 100644 Binary files a/img/immerse/immerse_example_10.png and b/img/immerse/immerse_example_10.png differ diff --git a/img/immerse/immerse_example_11.png b/img/immerse/immerse_example_11.png index 9306fbd6..0a32b0a5 100644 Binary files a/img/immerse/immerse_example_11.png and b/img/immerse/immerse_example_11.png differ diff --git a/img/immerse/immerse_example_12.png b/img/immerse/immerse_example_12.png index b8266646..11442bc2 100644 Binary files a/img/immerse/immerse_example_12.png and b/img/immerse/immerse_example_12.png differ diff --git a/img/immerse/immerse_example_14.png b/img/immerse/immerse_example_14.png index 29ff4d3a..7be71863 100644 Binary files a/img/immerse/immerse_example_14.png and b/img/immerse/immerse_example_14.png differ diff --git a/img/immerse/immerse_example_15.png b/img/immerse/immerse_example_15.png index a8b055da..b85a4c70 100644 Binary files a/img/immerse/immerse_example_15.png and b/img/immerse/immerse_example_15.png differ diff --git a/img/immerse/immerse_example_16.png b/img/immerse/immerse_example_16.png index ac2e30b6..61efce71 100644 Binary files a/img/immerse/immerse_example_16.png and b/img/immerse/immerse_example_16.png differ diff --git a/img/immerse/immerse_example_17.png b/img/immerse/immerse_example_17.png index b98206e6..34020fae 100644 Binary files a/img/immerse/immerse_example_17.png and b/img/immerse/immerse_example_17.png differ diff --git a/img/immerse/immerse_example_18.png b/img/immerse/immerse_example_18.png index 1edf11ca..6dec1665 100644 Binary files a/img/immerse/immerse_example_18.png and b/img/immerse/immerse_example_18.png differ diff --git a/img/immerse/immerse_example_4.png b/img/immerse/immerse_example_4.png index ef916e91..c995d521 100644 Binary files a/img/immerse/immerse_example_4.png and b/img/immerse/immerse_example_4.png differ diff --git a/img/immerse/immerse_example_5.png b/img/immerse/immerse_example_5.png index c305aa23..009e8463 100644 Binary files a/img/immerse/immerse_example_5.png and b/img/immerse/immerse_example_5.png differ diff --git a/img/immerse/immerse_example_6.png b/img/immerse/immerse_example_6.png index 67ed870b..195656d6 100644 Binary files a/img/immerse/immerse_example_6.png and b/img/immerse/immerse_example_6.png differ diff --git a/img/immerse/immerse_example_7.png b/img/immerse/immerse_example_7.png index caed29d8..11073fbc 100644 Binary files a/img/immerse/immerse_example_7.png and b/img/immerse/immerse_example_7.png differ diff --git a/img/immerse/immerse_example_8.png b/img/immerse/immerse_example_8.png index a59d729d..7ef075d3 100644 Binary files a/img/immerse/immerse_example_8.png and b/img/immerse/immerse_example_8.png differ diff --git a/img/immerse/immerse_example_9.png b/img/immerse/immerse_example_9.png index 5f598e7d..13defff3 100644 Binary files a/img/immerse/immerse_example_9.png and b/img/immerse/immerse_example_9.png differ diff --git a/img/qwt/qwt_example_1.png b/img/qwt/qwt_example_1.png index f748c7af..96c57029 100644 Binary files a/img/qwt/qwt_example_1.png and b/img/qwt/qwt_example_1.png differ diff --git a/img/qwt/qwt_example_10.png b/img/qwt/qwt_example_10.png index 41408629..bbaa6fe0 100644 Binary files a/img/qwt/qwt_example_10.png and b/img/qwt/qwt_example_10.png differ diff --git a/img/qwt/qwt_example_11.png b/img/qwt/qwt_example_11.png index 7ff91069..53e0620d 100644 Binary files a/img/qwt/qwt_example_11.png and b/img/qwt/qwt_example_11.png differ diff --git a/img/qwt/qwt_example_12.png b/img/qwt/qwt_example_12.png index 565476a3..da2dd1de 100644 Binary files a/img/qwt/qwt_example_12.png and b/img/qwt/qwt_example_12.png differ diff --git a/img/qwt/qwt_example_13.png b/img/qwt/qwt_example_13.png index 91fad26f..3f785f4f 100644 Binary files a/img/qwt/qwt_example_13.png and b/img/qwt/qwt_example_13.png differ diff --git a/img/qwt/qwt_example_14.png b/img/qwt/qwt_example_14.png index e397aede..857551df 100644 Binary files a/img/qwt/qwt_example_14.png and b/img/qwt/qwt_example_14.png differ diff --git a/img/qwt/qwt_example_15.png b/img/qwt/qwt_example_15.png index fa151780..f636a0f7 100644 Binary files a/img/qwt/qwt_example_15.png and b/img/qwt/qwt_example_15.png differ diff --git a/img/qwt/qwt_example_16.png b/img/qwt/qwt_example_16.png index c23f1593..e8548935 100644 Binary files a/img/qwt/qwt_example_16.png and b/img/qwt/qwt_example_16.png differ diff --git a/img/qwt/qwt_example_17.png b/img/qwt/qwt_example_17.png index 3c8a991c..0b070a39 100644 Binary files a/img/qwt/qwt_example_17.png and b/img/qwt/qwt_example_17.png differ diff --git a/img/qwt/qwt_example_18.png b/img/qwt/qwt_example_18.png index 06a882b2..40ef3788 100644 Binary files a/img/qwt/qwt_example_18.png and b/img/qwt/qwt_example_18.png differ diff --git a/img/qwt/qwt_example_2.png b/img/qwt/qwt_example_2.png index 2b24f613..82d3ce64 100644 Binary files a/img/qwt/qwt_example_2.png and b/img/qwt/qwt_example_2.png differ diff --git a/img/qwt/qwt_example_3.png b/img/qwt/qwt_example_3.png index 74eb29c3..a4250f2b 100644 Binary files a/img/qwt/qwt_example_3.png and b/img/qwt/qwt_example_3.png differ diff --git a/img/qwt/qwt_example_4.png b/img/qwt/qwt_example_4.png index 26cbf09d..068809e4 100644 Binary files a/img/qwt/qwt_example_4.png and b/img/qwt/qwt_example_4.png differ diff --git a/img/qwt/qwt_example_5.png b/img/qwt/qwt_example_5.png index 2b331542..d56b4cac 100644 Binary files a/img/qwt/qwt_example_5.png and b/img/qwt/qwt_example_5.png differ diff --git a/img/qwt/qwt_example_6.png b/img/qwt/qwt_example_6.png index e09ff14d..723d2359 100644 Binary files a/img/qwt/qwt_example_6.png and b/img/qwt/qwt_example_6.png differ diff --git a/img/qwt/qwt_example_7.png b/img/qwt/qwt_example_7.png index 78a8afb1..f97672bc 100644 Binary files a/img/qwt/qwt_example_7.png and b/img/qwt/qwt_example_7.png differ diff --git a/img/qwt/qwt_example_8.png b/img/qwt/qwt_example_8.png index c8919cd3..26e269bb 100644 Binary files a/img/qwt/qwt_example_8.png and b/img/qwt/qwt_example_8.png differ diff --git a/img/qwt/qwt_example_9.png b/img/qwt/qwt_example_9.png index 88ef18b1..df9c64fb 100644 Binary files a/img/qwt/qwt_example_9.png and b/img/qwt/qwt_example_9.png differ diff --git a/src/args.jl b/src/args.jl index 7dd86a0b..8850857f 100644 --- a/src/args.jl +++ b/src/args.jl @@ -41,7 +41,7 @@ PLOT_DEFAULTS[:xticks] = true PLOT_DEFAULTS[:yticks] = true PLOT_DEFAULTS[:size] = (600,400) PLOT_DEFAULTS[:windowtitle] = "Plots.jl" -PLOT_DEFAULTS[:show] = true +# PLOT_DEFAULTS[:show] = true PLOT_DEFAULTS[:args] = [] # additional args to pass to the backend PLOT_DEFAULTS[:kwargs] = [] # additional keyword args to pass to the backend diff --git a/src/backends/gadfly.jl b/src/backends/gadfly.jl index 8eacc574..7e1c4b51 100644 --- a/src/backends/gadfly.jl +++ b/src/backends/gadfly.jl @@ -6,31 +6,6 @@ immutable GadflyPackage <: PlottingPackage end gadfly!() = plotter!(:gadfly) -# # create a blank Gadfly.Plot object -# function plot(pkg::GadflyPackage; kw...) -# @eval import DataFrames - -# plt = Gadfly.Plot() -# plt.mapping = Dict() -# plt.data_source = DataFrames.DataFrame() -# plt.layers = plt.layers[1:0] - -# # add the title, axis labels, and theme -# d = Dict(kw) - -# plt.guides = Gadfly.GuideElement[Gadfly.Guide.xlabel(d[:xlabel]), -# Gadfly.Guide.ylabel(d[:ylabel]), -# Gadfly.Guide.title(d[:title])] - -# # add the legend? -# if d[:legend] -# unshift!(plt.guides, Gadfly.Guide.manual_color_key("", AbstractString[], Color[])) -# end - -# plt.theme = Gadfly.Theme(background_color = (haskey(d, :background_color) ? d[:background_color] : colorant"white")) - -# Plot(plt, pkg, 0, d, Dict[]) -# end function createGadflyPlotObject(d::Dict) @eval import DataFrames @@ -56,35 +31,67 @@ function createGadflyPlotObject(d::Dict) end -function getGeomFromLineType(linetype::Symbol, nbins::Int) - linetype == :line && return Gadfly.Geom.line - linetype == :dots && return Gadfly.Geom.point - linetype == :bar && return Gadfly.Geom.bar - linetype == :step && return Gadfly.Geom.step - linetype == :hist && return Gadfly.Geom.histogram(bincount=nbins) - linetype == :none && return Gadfly.Geom.point # change this? are we usually pairing no line with scatterplots? - linetype == :sticks && return Gadfly.Geom.bar +function getGeomsFromLineType(linetype::Symbol) + linetype == :line && return [Gadfly.Geom.path] + linetype == :dots && return [Gadfly.Geom.point] + linetype == :bar && return [Gadfly.Geom.bar] + linetype == :step && return [Gadfly.Geom.step] + # linetype == :hist && return [Gadfly.Geom.histogram(bincount=nbins)] + # linetype == :none && return [Gadfly.Geom.point] # change this? are we usually pairing no line with scatterplots? + linetype == :none && return [] + linetype == :sticks && return [Gadfly.Geom.bar] error("linetype $linetype not currently supported with Gadfly") end -function getGeoms(linetype::Symbol, marker::Symbol, nbins::Int) - geoms = [] +# function getGeoms(linetype::Symbol, marker::Symbol, markercolor::Colorant, nbins::Int) +function getLineGeoms(d::Dict) + lt = d[:linetype] + lt in (:heatmap,:hexbin) && return [Gadfly.Geom.hexbin(xbincount = d[:nbins], ybincount = d[:nbins])] + lt == :hist && return [Gadfly.Geom.histogram(bincount = d[:nbins])] + lt == :none && return [] + lt == :line && return [Gadfly.Geom.path] + lt == :dots && return [Gadfly.Geom.point] + lt == :bar && return [Gadfly.Geom.bar] + lt == :step && return [Gadfly.Geom.step] + lt == :sticks && return [Gadfly.Geom.bar] + error("linetype $lt not currently supported with Gadfly") - # handle heatmaps (hexbins) specially - if linetype in (:heatmap,:hexbin) - push!(geoms, Gadfly.Geom.hexbin(xbincount=nbins, ybincount=nbins)) - else + # else + # geoms = [] - # for other linetypes, get the correct Geom - push!(geoms, getGeomFromLineType(linetype, nbins)) + # # for other linetypes, get the correct Geom + # append!(geoms, getGeomFromLineType(lt, nbins)) - # for any marker, add Geom.point - if marker != :none - push!(geoms, Gadfly.Geom.point) - end + # # # for any marker, add Geom.point + # # if marker != :none + # # # push!(geoms, Gadfly.Geom.default_point_size) + # # push!(geoms, getGadflyMarker(marker, markercolor)) + # # end + # end + + # geoms +end + + + +# serious hack (I think?) to draw my own shapes as annotations... will it work? who knows... +function getMarkerGeomsAndGuides(d::Dict) + marker = d[:marker] + if marker == :none + return [],[] + elseif marker == :rect + sz = d[:markersize] * Gadfly.px + # primitive = Gadfly.Compose.PolygonPrimitive() + + xs = [xi * Gadfly.mm - sz/2 for xi in d[:x]] + ys = [yi * Gadfly.mm - sz/2 for yi in d[:y]] + # xs = collect(d[:x]) - sz/2 + # ys = collect(d[:y]) - sz/2 + # w = [d[:markersize] * Gadfly.px] + # h = [d[:markersize] * Gadfly.px] + return [], [Gadfly.Guide.annotation(Gadfly.compose(Gadfly.context(), Gadfly.rectangle(xs,ys,sz,sz), Gadfly.fill(d[:markercolor]), Gadfly.stroke(nothing)))] end - - geoms + [Gadfly.Geom.point], [] end @@ -92,19 +99,29 @@ function addGadflySeries!(gplt, d::Dict) gfargs = [] # add the Geoms - append!(gfargs, getGeoms(d[:linetype], d[:marker], d[:nbins])) - - # set color, line width, and point size - theme = Gadfly.Theme(default_color = d[:color], - line_width = d[:width] * Gadfly.px, - default_point_size = d[:markersize] * Gadfly.px) - push!(gfargs, theme) + append!(gfargs, getLineGeoms(d)) #[:linetype], d[:marker], d[:markercolor], d[:nbins])) + + # handle markers + geoms, guides = getMarkerGeomsAndGuides(d) + append!(gfargs, geoms) + append!(gplt.guides, guides) # add a regression line? if d[:reg] push!(gfargs, Gadfly.Geom.smooth(method=:lm)) end + + # if we haven't added any geoms, we're probably just going to use annotations? + isempty(gfargs) && return + + + # set theme: color, line width, and point size + theme = Gadfly.Theme(default_color = d[:color], + line_width = d[:width] * Gadfly.px, + default_point_size = d[:markersize] * Gadfly.px) + push!(gfargs, theme) + # for histograms, set x=y x = d[d[:linetype] == :hist ? :y : :x]