From a504e9bc0211c61ee16849668b719c663177e4fa Mon Sep 17 00:00:00 2001 From: Thomas Breloff Date: Thu, 10 Sep 2015 13:43:24 -0400 Subject: [PATCH] docs --- README.md | 74 ++++++++++++++++++++++++------------------------ img/gadfly1.png | Bin 20507 -> 28436 bytes img/qwt1.png | Bin 11840 -> 16006 bytes src/Plots.jl | 20 ++++++------- src/gadfly.jl | 2 +- src/plot.jl | 68 ++++++-------------------------------------- src/plotter.jl | 37 ++++++------------------ 7 files changed, 64 insertions(+), 137 deletions(-) diff --git a/README.md b/README.md index 88166b4c..d4d33944 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,14 @@ First, clone the package, and get any plotting packages you need: ``` Pkg.clone("https://github.com/JuliaPlot/Plots.jl.git") -Pkg.clone("https://github.com/tbreloff/Qwt.jl.git") # requires pyqt and pyqwt -Pkg.add("Gadfly") # might also need to Pkg.checkout("Gadfly") and maybe Colors/Compose... I had trouble with it +Pkg.clone("https://github.com/tbreloff/Qwt.jl.git") # [optional] requires pyqt and pyqwt +Pkg.add("Gadfly") # [optional] might also need to Pkg.checkout("Gadfly") + # and maybe Colors/Compose... I had trouble with it ``` -Now load it in: +Load it in. The underlying plotting backends are not imported until `plotter()` is called (which happens +on your first call to `plot`). This means that you don't need any backends to be installed when you call `using Plots`. +For now, the default backend is Qwt. ``` using Plots @@ -23,8 +26,7 @@ using Plots Do a plot in Qwt, then save a png: ``` -plotter!(:qwt) -plot(1:10) +plot(rand(10,2); marker = :rect) savepng(ans, Plots.IMG_DIR * "qwt1.png") ``` @@ -36,9 +38,9 @@ which saves: Do a plot in Gadfly, then save a png: ``` -plotter!(:gadfly) -plot(1:10) -savepng(ans, Plots.IMG_DIR * "gadfly1.png", 6Gadfly.inch, 4Gadfly.inch) +plotter!(:gadfly) # switches the backend to Gadfly +plot(rand(10,2); marker = :rect) +savepng(ans, Plots.IMG_DIR * "gadfly1.png", 6 * Gadfly.inch, 4 * Gadfly.inch) ``` which saves: @@ -46,23 +48,10 @@ which saves: ![gadfly_plt](img/gadfly1.png) -Note that you do not need all underlying packages to use this. I use Requires.jl to -perform lazy loading of the modules, so there's no initialization until you call `plotter!()`. -This has an added benefit that you can call `using Plots` and it should return quickly... -no more waiting for a plotting package to load when you don't even use it. :) -``` -julia> tic(); using Plots; toc(); -elapsed time: 0.356158445 seconds +# plot and plotter! interface (WIP) -julia> tic(); using Gadfly; toc(); -WARNING: using Gadfly.Plots in module Main conflicts with an existing identifier. -elapsed time: 3.1334697 seconds -``` - -# plot and plotter! (proposal) - -The main plot command. You must call `plotter!(:ModuleName)` to set the current plotting environment first. +The main plot command. Call `plotter!(:module)` to set the current plotting backend. Commands are converted into the relevant plotting commands for that package: ``` @@ -102,7 +91,7 @@ Here are some various args to supply, and the implicit mapping (AVec == Abstract plot(df::DataFrame, columns; kw...) # one line per column, but on a subset of column names ``` -You can swap out `plot` for `subplot`. Each line will go into a separate plot. Use the layout keyword: +[TODO] You can swap out `plot` for `subplot`. Each line will go into a separate plot. Use the layout keyword: ``` y = rand(100,3) @@ -112,12 +101,17 @@ You can swap out `plot` for `subplot`. Each line will go into a separate plot. # and the others will share the second row ``` -Other potential shorthands: +Shorthands: ``` - hist(args..., kw...) - scatter(args..., kw...) - heatmap(args..., kw...) + scatter(args...; kw...) = plot(args...; kw..., linetype = :none, marker = :rect) + scatter!(args...; kw...) = plot!(args...; kw..., linetype = :none, marker = :rect) + bar(args...; kw...) = plot(args...; kw..., linetype = :bar) + bar!(args...; kw...) = plot!(args...; kw..., linetype = :bar) + histogram(args...; kw...) = plot(args...; kw..., linetype = :hist) + histogram!(args...; kw...) = plot!(args...; kw..., linetype = :hist) + heatmap(args...; kw...) = plot(args...; kw..., linetype = :heatmap) + heatmap!(args...; kw...) = plot!(args...; kw..., linetype = :heatmap) ``` Some keyword arguments you can set: @@ -127,11 +121,14 @@ Some keyword arguments you can set: color # can be a string ("red") or a symbol (:red) or a ColorsTypes.jl Colorant (RGB(1,0,0)) or :auto (which lets the package pick) label # string or symbol, applies to that line, may go in a legend width # width of a line - linetype # :line, :step, :stepinverted, :sticks, :dots, :none, :heatmap + linetype # :line, :step, :stepinverted, :sticks, :dots, :none, :heatmap, :hexbin, :hist, :bar linestyle # :solid, :dash, :dot, :dashdot, :dashdotdot marker # :none, :ellipse, :rect, :diamond, :utriangle, :dtriangle, :cross, :xcross, :star1, :star2, :hexagon - markercolor # same choices as `color` + markercolor # same choices as `color`, or :match will set the color to be the same as `color` markersize # size of the marker + nbins # number of bins for heatmap/hexbin and histograms + heatmap_c # color cutoffs for Qwt heatmaps + fillto # fillto value for area plots title # string or symbol, title of the plot xlabel # string or symbol, label on the bottom (x) axis ylabel # string or symbol, label on the left (y) axis @@ -150,12 +147,15 @@ If you don't include a keyword argument, these are the defaults: axis = :left color = :auto label = automatically generated (y1, y2, ...., or y1 (R), y2 (R) for the right axis) - width = 2 + width = 1 linetype = :line linestype = :solid marker = :none - markercolor = :auto - markersize = 5 + markercolor = :match + markersize = 3 + nbins = 100 + heatmap_c = (0.15, 0.5) + fillto = nothing title = "" xlabel = "" ylabel = "" @@ -177,20 +177,20 @@ When plotting multiple lines, you can give every line the same trait by using th # TODO -- [ ] Plot vectors/matrices +- [x] Plot vectors/matrices/functions - [ ] Plot DataFrames - [ ] Subplots -- [ ] Histograms +- [x] Histograms - [ ] 3D plotting - [ ] Scenes/Drawing - [ ] Graphs - [ ] Interactivity (GUIs) -- [ ] Gadfly.jl +- [x] Gadfly.jl - [ ] PyPlot.jl - [ ] Winston.jl - [ ] Gaston.jl - [ ] GLPlot.jl -- [ ] Qwt.jl +- [x] Qwt.jl - [ ] Bokeh.jl - [ ] Plotly.jl - [ ] GoogleCharts.jl diff --git a/img/gadfly1.png b/img/gadfly1.png index b40b4e7f4a477f31f52b94e5ae342256293fb5db..ce1560ac1d06d462b492774cce6f0e01d773eec0 100644 GIT binary patch literal 28436 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 literal 11840 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 diff --git a/src/Plots.jl b/src/Plots.jl index 68e90801..316d3813 100644 --- a/src/Plots.jl +++ b/src/Plots.jl @@ -10,7 +10,7 @@ export plotDefault, scatter, bar, - hist, + histogram, heatmap, plotter!, @@ -19,7 +19,7 @@ export plotDefault!, scatter!, bar!, - hist!, + histogram!, heatmap!, savepng @@ -77,14 +77,14 @@ include("plot.jl") # const LINE_TYPES = (:line, :step, :stepinverted, :sticks, :dots, :none, :heatmap, :hist, :bar) -scatter(args...; kw...) = plot(args...; kw..., linetype = :dots) -scatter!(args...; kw...) = plot!(args...; kw..., linetype = :dots) -bar(args...; kw...) = plot(args...; kw..., linetype = :bar) -bar!(args...; kw...) = plot!(args...; kw..., linetype = :bar) -hist(args...; kw...) = plot(args...; kw..., linetype = :hist) -hist!(args...; kw...) = plot!(args...; kw..., linetype = :hist) -heatmap(args...; kw...) = plot(args...; kw..., linetype = :heatmap) -heatmap!(args...; kw...) = plot!(args...; kw..., linetype = :heatmap) +scatter(args...; kw...) = plot(args...; kw..., linetype = :none, marker = :rect) +scatter!(args...; kw...) = plot!(args...; kw..., linetype = :none, marker = :rect) +bar(args...; kw...) = plot(args...; kw..., linetype = :bar) +bar!(args...; kw...) = plot!(args...; kw..., linetype = :bar) +histogram(args...; kw...) = plot(args...; kw..., linetype = :hist) +histogram!(args...; kw...) = plot!(args...; kw..., linetype = :hist) +heatmap(args...; kw...) = plot(args...; kw..., linetype = :heatmap) +heatmap!(args...; kw...) = plot!(args...; kw..., linetype = :heatmap) # --------------------------------------------------------- diff --git a/src/gadfly.jl b/src/gadfly.jl index 77f0bea2..2a9836f1 100644 --- a/src/gadfly.jl +++ b/src/gadfly.jl @@ -28,6 +28,7 @@ function getGeomFromLineType(linetype::Symbol) linetype == :bar && return Gadfly.Geom.bar linetype == :step && return Gadfly.Geom.step linetype == :hist && return Gadfly.Geom.hist + linetype == :none && return Gadfly.Geom.point # change this? are we usually pairing no line with scatterplots? error("linetype $linetype not currently supported with Gadfly") end @@ -59,7 +60,6 @@ function plot!(::GadflyPackage, plt::Plot; kw...) gfargs = [] # add the Geoms - println(d) append!(gfargs, getGeoms(d[:linetype], d[:marker], d[:nbins])) # set color, line width, and point size diff --git a/src/plot.jl b/src/plot.jl index ef38cd83..448b2702 100644 --- a/src/plot.jl +++ b/src/plot.jl @@ -1,14 +1,14 @@ doc""" -The main plot command. You must call `plotter!(:ModuleName)` to set the current plotting environment first. +The main plot command. Call `plotter!(:module)` to set the current plotting backend. Commands are converted into the relevant plotting commands for that package: ``` plotter!(:gadfly) - plot(1:10) # this calls `y = 1:10; Gadfly.plot(x=1:length(y), y=y)` + plot(1:10) # this effectively calls `y = 1:10; Gadfly.plot(x=1:length(y), y=y)` plotter!(:qwt) - plot(1:10) # this calls `Qwt.plot(1:10)` + plot(1:10) # this effectively calls `Qwt.plot(1:10)` ``` Use `plot` to create a new plot object, and `plot!` to add to an existing one: @@ -19,39 +19,8 @@ Use `plot` to create a new plot object, and `plot!` to add to an existing one: plot!(plotobj, args...; kw...) # adds to the plot `plotobj` ``` -Now that you know which plot object you're updating (new, current, or other), I'll leave it off for simplicity. -Here are some various args to supply, and the implicit mapping (AVec == AbstractVector and AMat == AbstractMatrix): - -``` - plot(y::AVec; kw...) # one line... x = 1:length(y) - plot(x::AVec, y::AVec; kw...) # one line (will assert length(x) == length(y)) - plot(y::AMat; kw...) # multiple lines (one per column of x), all sharing x = 1:size(y,1) - plot(x::AVec, y::AMat; kw...) # multiple lines (one per column of x), all sharing x (will assert length(x) == size(y,1)) - plot(x::AMat, y::AMat; kw...) # multiple lines (one per column of x/y... will assert size(x) == size(y)) - plot(x::AVec, f::Function; kw...) # one line, y = f(x) - plot(x::AMat, f::Function; kw...) # multiple lines, yᵢⱼ = f(xᵢⱼ) - plot(x::AVec, fs::AVec{Function}; kw...) # multiple lines, yᵢⱼ = fⱼ(xᵢ) - plot(y::AVec{AVec}; kw...) # multiple lines, each with x = 1:length(y[i]) - plot(x::AVec, y::AVec{AVec}; kw...) # multiple lines, will assert length(x) == length(y[i]) - plot(x::AVec{AVec}, y::AVec{AVec}; kw...) # multiple lines, will assert length(x[i]) == length(y[i]) - plot(n::Integer; kw...) # n lines, all empty (for updating plots) - - # TODO: how do we handle NA values in dataframes? - plot(df::DataFrame; kw...) # one line per DataFrame column, labels == names(df) - plot(df::DataFrame, columns; kw...) # one line per column, but on a subset of column names -``` - - TODO: DataFrames - -You can swap out `plot` for `subplot`. Each line will go into a separate plot. Use the layout keyword: - -``` - y = rand(100,3) - subplot(y; layout=(2,2), kw...) # creates 3 lines going into 3 separate plots, laid out on a 2x2 grid (last row is filled with plot #3) - subplot(y; layout=(1,3), kw...) # again 3 plots, all in the same row - subplot(y; layout=[1,[2,3]]) # pass a nested Array to fully specify the layout. here the first plot will take up the first row, - # and the others will share the second row -``` +There are lots of ways to pass in data... just try it and it will likely work as expected. +When you pass in matrices, it splits by columns. See the documentation for more info. Some keyword arguments you can set: @@ -65,6 +34,9 @@ Some keyword arguments you can set: marker # :none, :ellipse, :rect, :diamond, :utriangle, :dtriangle, :cross, :xcross, :star1, :star2, :hexagon markercolor # same choices as `color` markersize # size of the marker + nbins # number of bins for heatmap/hexbin and histograms + heatmap_c # color cutoffs for Qwt heatmaps + fillto # fillto value for area plots title # string or symbol, title of the plot xlabel # string or symbol, label on the bottom (x) axis ylabel # string or symbol, label on the left (y) axis @@ -77,30 +49,6 @@ Some keyword arguments you can set: show # true or false, show the plot (in case you don't want the window to pop up right away) ``` -If you don't include a keyword argument, these are the defaults: - -``` - axis = :left - color = :auto - label = automatically generated (y1, y2, ...., or y1 (R), y2 (R) for the right axis) - width = 2 - linetype = :line - linestype = :solid - marker = :none - markercolor = :auto - markersize = 5 - title = "" - xlabel = "" - ylabel = "" - yrightlabel = "" - reg = false - size = (800,600) - pos = (0,0) - windowtitle = "" - screen = 1 - show = true -``` - When plotting multiple lines, you can give every line the same trait by using the singular, or add an "s" to pluralize. (yes I know it's not gramatically correct, but it's easy to use and implement) diff --git a/src/plotter.jl b/src/plotter.jl index be7895fb..4672c383 100644 --- a/src/plotter.jl +++ b/src/plotter.jl @@ -11,25 +11,22 @@ const AVAILABLE_PACKAGES = [:qwt, :gadfly] const INITIALIZED_PACKAGES = Set{Symbol}() type CurrentPackage - # pkg::Nullable{PlottingPackage} sym::Symbol pkg::PlottingPackage end -# const CURRENT_PACKAGE = CurrentPackage(Nullable{PlottingPackage}()) const CURRENT_PACKAGE = CurrentPackage(:qwt, QwtPackage()) doc""" -Returns the current plotting package name. Initializes package on first use. +Returns the current plotting package name. Initializes package on first call. """ function plotter() - # if isnull(CURRENT_PACKAGE.pkg) - # error("Must choose a plotter. Example: `plotter!(:qwt)`") - # end + currentPackageSymbol = CURRENT_PACKAGE.sym if !(currentPackageSymbol in INITIALIZED_PACKAGES) # initialize + print("Initializing package: $CURRENT_PACKAGE... ") if currentPackageSymbol == :qwt @eval import Qwt elseif currentPackageSymbol == :gadfly @@ -38,11 +35,9 @@ function plotter() error("Unknown plotter $currentPackageSymbol. Choose from: $AVAILABLE_PACKAGES") end push!(INITIALIZED_PACKAGES, currentPackageSymbol) - # plotter!(CURRENT_PACKAGE.sym) + println("done.") end - # get(CURRENT_PACKAGE.pkg) - println("Current package: $CURRENT_PACKAGE") CURRENT_PACKAGE.pkg end @@ -51,34 +46,18 @@ Set the plot backend. Choose from: :qwt, :gadfly """ function plotter!(modname) + # set the PlottingPackage if modname == :qwt - # if !(modname in INITIALIZED_PACKAGES) - # # qwt() - # @eval import Qwt - # push!(INITIALIZED_PACKAGES, modname) - # end - # global Qwt = Main.Qwt - # CURRENT_PACKAGE.sym = modname - # CURRENT_PACKAGE.pkg = Nullable(QwtPackage()) CURRENT_PACKAGE.pkg = QwtPackage() - # return - elseif modname == :gadfly - # if !(modname in INITIALIZED_PACKAGES) - # # gadfly() - # @eval import Gadfly - # push!(INITIALIZED_PACKAGES, modname) - # end - # global Gadfly = Main.Gadfly - # CURRENT_PACKAGE.sym = modname - # CURRENT_PACKAGE.pkg = Nullable(GadflyPackage()) CURRENT_PACKAGE.pkg = GadflyPackage() - # return - else error("Unknown plotter $modname. Choose from: $AVAILABLE_PACKAGES") end + # update the symbol CURRENT_PACKAGE.sym = modname + + # return the package CURRENT_PACKAGE.pkg end