From 503d741ea65322417f89c51c5bf6c4d1f5a6a7de Mon Sep 17 00:00:00 2001 From: Anshul Singhvi Date: Fri, 13 Mar 2020 19:26:45 +0530 Subject: [PATCH 01/15] move tryrange to PlotUtils --- src/series.jl | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/src/series.jl b/src/series.jl index bba2f313..8fb51b15 100644 --- a/src/series.jl +++ b/src/series.jl @@ -388,32 +388,14 @@ end axis_limits(plt[1], :x) catch xinv = invscalefunc(get(plotattributes, :xscale, :identity)) - xm = tryrange(f, xinv.([-5,-1,0,0.01])) - xm, tryrange(f, filter(x->x>xm, xinv.([5,1,0.99, 0, -0.01]))) + xm = PlotUtils.tryrange(f, xinv.([-5,-1,0,0.01])) + xm, PlotUtils.tryrange(f, filter(x->x>xm, xinv.([5,1,0.99, 0, -0.01]))) end end f, xmin, xmax end -# try some intervals over which the function may be defined -function tryrange(F::AbstractArray, vec) - rets = [tryrange(f, vec) for f in F] # get the preferred for each - maxind = maximum(indexin(rets, vec)) # get the last attempt that succeeded (most likely to fit all) - rets .= [tryrange(f, vec[maxind:maxind]) for f in F] # ensure that all functions compute there - rets[1] -end - -function tryrange(F, vec) - for v in vec - try - tmp = F(v) - return v - catch - end - end - error("$F is not a Function, or is not defined at any of the values $vec") -end # # # -------------------------------------------------------------------- # # 2 arguments From edcaab3c56416f3fb0a9f362d620ec6052634e8e Mon Sep 17 00:00:00 2001 From: Anshul Singhvi Date: Sat, 14 Mar 2020 11:03:23 +0530 Subject: [PATCH 02/15] bump the PlotUtils compat this will only work after a release --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 00c034e9..2f2df781 100644 --- a/Project.toml +++ b/Project.toml @@ -41,7 +41,7 @@ Measures = "0.3" NaNMath = "0.3" PGFPlotsX = "1.2.0" PlotThemes = "1" -PlotUtils = "0.6.1" +PlotUtils = "0.6.5" RecipesBase = "0.8" Reexport = "0.2" Requires = "0.5, 1.0" From ae009cd53f0f226d43924a175c0719c4c71857a0 Mon Sep 17 00:00:00 2001 From: wfrgra Date: Mon, 30 Mar 2020 20:02:06 +1100 Subject: [PATCH 03/15] Add ability to place legend label next to final datapoint in GR via legend=:label --- src/args.jl | 2 +- src/backends/gr.jl | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/args.jl b/src/args.jl index cebc5344..a217494b 100644 --- a/src/args.jl +++ b/src/args.jl @@ -1252,7 +1252,7 @@ function convertLegendValue(val::Symbol) :best elseif val in (:no, :none) :none - elseif val in (:right, :left, :top, :bottom, :inside, :best, :legend, :topright, :topleft, :bottomleft, :bottomright, :outertopright, :outertopleft, :outertop, :outerright, :outerleft, :outerbottomright, :outerbottomleft, :outerbottom) + elseif val in (:right, :left, :top, :bottom, :inside, :best, :legend, :topright, :topleft, :bottomleft, :bottomright, :outertopright, :outertopleft, :outertop, :outerright, :outerleft, :outerbottomright, :outerbottomleft, :outerbottom, :label) val else error("Invalid symbol for legend: $val") diff --git a/src/backends/gr.jl b/src/backends/gr.jl index 5a8bf07d..63ed42df 100644 --- a/src/backends/gr.jl +++ b/src/backends/gr.jl @@ -1043,6 +1043,9 @@ function gr_display(sp::Subplot{GRBackend}, w, h, viewport_canvas) viewport_plotarea[3] += legendh + 0.04 end end + if sp[:legend] == :label + viewport_plotarea[2] -= legendw + end # fill in the plot area background bg = plot_color(sp[:background_color_inside]) @@ -1798,6 +1801,13 @@ function gr_display(sp::Subplot{GRBackend}, w, h, viewport_canvas) gr_text(GR.wctondc(xi, yi)..., str) end + if sp[:legend] == :label && should_add_to_legend(series) + gr_set_font(legendfont(sp)) + GR.settextalign(GR.TEXT_HALIGN_LEFT, GR.TEXT_VALIGN_HALF) + gr_set_textcolor(plot_color(sp[:legendfontcolor])) + (x_l,y_l) = GR.wctondc(x[end],y[end]) + gr_text(x_l+.01,y_l,series[:label]) + end GR.restorestate() end @@ -1805,7 +1815,7 @@ function gr_display(sp::Subplot{GRBackend}, w, h, viewport_canvas) hascolorbar(sp) && gr_draw_colorbar(cbar, sp, get_clims(sp)) # add the legend - if sp[:legend] != :none + if !(sp[:legend] in(:none, :label)) GR.savestate() GR.selntran(0) GR.setscale(0) From 2a4b74d0fff7e92a3972fed97f3d076f413eed0b Mon Sep 17 00:00:00 2001 From: wfrgra Date: Tue, 31 Mar 2020 19:38:47 +1100 Subject: [PATCH 04/15] renamed new legend setting from :label to :inline --- src/arg_desc.jl | 2 +- src/args.jl | 2 +- src/backends/gr.jl | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/arg_desc.jl b/src/arg_desc.jl index 7b7e5283..f9237bee 100644 --- a/src/arg_desc.jl +++ b/src/arg_desc.jl @@ -89,7 +89,7 @@ const _arg_desc = KW( :foreground_color_legend => "Color Type or `:match` (matches `:foreground_color_subplot`). Foreground color of the legend.", :foreground_color_title => "Color Type or `:match` (matches `:foreground_color_subplot`). Color of subplot title.", :color_palette => "Vector of colors (cycle through) or color gradient (generate list from gradient) or `:auto` (generate a color list using `Colors.distiguishable_colors` and custom seed colors chosen to contrast with the background). The color palette is a color list from which series colors are automatically chosen.", -:legend => "Bool (show the legend?) or Symbol (legend position). Symbol values: `:none`, `:best`, `:right`, `:left`, `:top`, `:bottom`, `:inside`, `:legend`, `:topright`, `:topleft`, `:bottomleft`, `:bottomright` (note: only some may be supported in each backend)", +:legend => "Bool (show the legend?) or Symbol (legend position). Symbol values: `:none`, `:best`, `:right`, `:left`, `:top`, `:bottom`, `:inside`, `:legend`, `:topright`, `:topleft`, `:bottomleft`, `:bottomright` , `:inline` (note: only some may be supported in each backend)", :legendfontfamily => "String or Symbol. Font family of legend entries.", :legendfontsize => "Integer. Font pointsize of legend entries.", :legendfonthalign => "Symbol. Font horizontal alignment of legend entries: :hcenter, :left, :right or :center", diff --git a/src/args.jl b/src/args.jl index a217494b..3aa2395e 100644 --- a/src/args.jl +++ b/src/args.jl @@ -1252,7 +1252,7 @@ function convertLegendValue(val::Symbol) :best elseif val in (:no, :none) :none - elseif val in (:right, :left, :top, :bottom, :inside, :best, :legend, :topright, :topleft, :bottomleft, :bottomright, :outertopright, :outertopleft, :outertop, :outerright, :outerleft, :outerbottomright, :outerbottomleft, :outerbottom, :label) + elseif val in (:right, :left, :top, :bottom, :inside, :best, :legend, :topright, :topleft, :bottomleft, :bottomright, :outertopright, :outertopleft, :outertop, :outerright, :outerleft, :outerbottomright, :outerbottomleft, :outerbottom, :inline) val else error("Invalid symbol for legend: $val") diff --git a/src/backends/gr.jl b/src/backends/gr.jl index 63ed42df..1419275b 100644 --- a/src/backends/gr.jl +++ b/src/backends/gr.jl @@ -1043,7 +1043,7 @@ function gr_display(sp::Subplot{GRBackend}, w, h, viewport_canvas) viewport_plotarea[3] += legendh + 0.04 end end - if sp[:legend] == :label + if sp[:legend] == :inline viewport_plotarea[2] -= legendw end @@ -1801,7 +1801,7 @@ function gr_display(sp::Subplot{GRBackend}, w, h, viewport_canvas) gr_text(GR.wctondc(xi, yi)..., str) end - if sp[:legend] == :label && should_add_to_legend(series) + if sp[:legend] == :inline && should_add_to_legend(series) gr_set_font(legendfont(sp)) GR.settextalign(GR.TEXT_HALIGN_LEFT, GR.TEXT_VALIGN_HALF) gr_set_textcolor(plot_color(sp[:legendfontcolor])) @@ -1815,7 +1815,7 @@ function gr_display(sp::Subplot{GRBackend}, w, h, viewport_canvas) hascolorbar(sp) && gr_draw_colorbar(cbar, sp, get_clims(sp)) # add the legend - if !(sp[:legend] in(:none, :label)) + if !(sp[:legend] in(:none, :inline)) GR.savestate() GR.selntran(0) GR.setscale(0) From 9029e37671d27deb81c0c1c9cbf0994ae87fe6f9 Mon Sep 17 00:00:00 2001 From: wfrgra Date: Tue, 31 Mar 2020 20:05:21 +1100 Subject: [PATCH 05/15] Turn TimeType annotation locations to float fix errors --- src/components.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components.jl b/src/components.jl index c87fa50f..c5d8b706 100644 --- a/src/components.jl +++ b/src/components.jl @@ -594,7 +594,9 @@ function process_annotation(sp::Subplot, xs, ys, labs, font = font()) xlength = length(methods(length, (typeof(xs),))) == 0 ? 1 : length(xs) ylength = length(methods(length, (typeof(ys),))) == 0 ? 1 : length(ys) for i in 1:max(xlength, ylength, length(labs)) - x, y, lab = _cycle(xs, i), _cycle(ys, i), _cycle(labs, i) + x, y, lab = _cycle(xs, i), _cycle(ys, i), _cycle(labs, i) + x = typeof(x) <: TimeType ? Dates.value(x) : x + y = typeof(y) <: TimeType ? Dates.value(y) : y if lab == :auto alphabet = "abcdefghijklmnopqrstuvwxyz" push!(anns, (x, y, text(string("(", alphabet[sp[:subplot_index]], ")"), font))) From 11a859e83ecc191dff18317e49272bcfcadf4875 Mon Sep 17 00:00:00 2001 From: wfrgra Date: Tue, 31 Mar 2020 20:54:07 +1100 Subject: [PATCH 06/15] have legend appear away from other data for any xflip and ymirror combination --- src/backends/gr.jl | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/backends/gr.jl b/src/backends/gr.jl index 1419275b..bb4f636f 100644 --- a/src/backends/gr.jl +++ b/src/backends/gr.jl @@ -1044,7 +1044,11 @@ function gr_display(sp::Subplot{GRBackend}, w, h, viewport_canvas) end end if sp[:legend] == :inline - viewport_plotarea[2] -= legendw + if sp[:yaxis][:mirror] + viewport_plotarea[1] += legendw + else + viewport_plotarea[2] -= legendw + end end # fill in the plot area background @@ -1803,10 +1807,18 @@ function gr_display(sp::Subplot{GRBackend}, w, h, viewport_canvas) if sp[:legend] == :inline && should_add_to_legend(series) gr_set_font(legendfont(sp)) - GR.settextalign(GR.TEXT_HALIGN_LEFT, GR.TEXT_VALIGN_HALF) gr_set_textcolor(plot_color(sp[:legendfontcolor])) - (x_l,y_l) = GR.wctondc(x[end],y[end]) - gr_text(x_l+.01,y_l,series[:label]) + if sp[:yaxis][:mirror] + (_,i) = sp[:xaxis][:flip] ? findmax(x) : findmin(x) + GR.settextalign(GR.TEXT_HALIGN_RIGHT, GR.TEXT_VALIGN_HALF) + offset = -0.01 + else + (_,i) = sp[:xaxis][:flip] ? findmin(x) : findmax(x) + GR.settextalign(GR.TEXT_HALIGN_LEFT, GR.TEXT_VALIGN_HALF) + offset = 0.01 + end + (x_l,y_l) = GR.wctondc(x[i],y[i]) + gr_text(x_l+offset,y_l,series[:label]) end GR.restorestate() end From 945874ca7db3b9795a8fd86a6233129371fa4baa Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Tue, 31 Mar 2020 22:13:27 +0200 Subject: [PATCH 07/15] clean up series.jl --- src/series.jl | 153 +++++++++++++++++++------------------------------- 1 file changed, 59 insertions(+), 94 deletions(-) diff --git a/src/series.jl b/src/series.jl index e2ae1057..4aa4561a 100644 --- a/src/series.jl +++ b/src/series.jl @@ -205,21 +205,16 @@ function _apply_type_recipe(plotattributes, v::AbstractArray, letter) return w end -# # special handling for Surface... need to properly unwrap and re-wrap -# function _apply_type_recipe(plotattributes, v::Surface) -# T = eltype(v.surf) -# @show T -# if T <: Integer || T <: AbstractFloat -# v -# else -# ret = _apply_type_recipe(plotattributes, v.surf) -# if typeof(ret) <: Formatted -# Formatted(Surface(ret.data), ret.formatter) -# else -# v -# end -# end -# end +# special handling for Surface... need to properly unwrap and re-wrap +_apply_type_recipe(plotattributes, v::Surface{<:AMat{<:DataPoint}}) = v +function _apply_type_recipe(plotattributes, v::Surface) + ret = _apply_type_recipe(plotattributes, v.surf) + if typeof(ret) <: Formatted + Formatted(Surface(ret.data), ret.formatter) + else + Surface(ret.data) + end +end # don't do anything for ints or floats _apply_type_recipe(plotattributes, v::AbstractArray{<:DataPoint}, letter) = v @@ -309,9 +304,9 @@ end end -# # -------------------------------------------------------------------- -# # 1 argument -# # -------------------------------------------------------------------- +# -------------------------------------------------------------------- +# 1 argument +# -------------------------------------------------------------------- # helper function to ensure relevant attributes are wrapped by Surface function wrap_surfaces(plotattributes::AKW) @@ -328,7 +323,7 @@ end all3D(plotattributes) = trueOrAllTrue(st -> st in (:contour, :contourf, :heatmap, :surface, :wireframe, :contour3d, :image, :plots_heatmap), get(plotattributes, :seriestype, :none)) # return a surface if this is a 3d plot, otherwise let it be sliced up -@recipe function f(mat::AMat{T}) where T<:Union{Integer,AbstractFloat,Missing} +@recipe function f(mat::AMat{<:MaybeNumber}) if all3D(plotattributes) n,m = axes(mat) wrap_surfaces(plotattributes) @@ -339,7 +334,7 @@ all3D(plotattributes) = trueOrAllTrue(st -> st in (:contour, :contourf, :heatmap end # if a matrix is wrapped by Formatted, do similar logic, but wrap data with Surface -@recipe function f(fmt::Formatted{T}) where T<:AbstractMatrix +@recipe function f(fmt::Formatted{<:AMat}) if all3D(plotattributes) mat = fmt.data n,m = axes(mat) @@ -351,14 +346,14 @@ end end # assume this is a Volume, so construct one -@recipe function f(vol::AbstractArray{T,3}, args...) where T<:Union{Number,Missing} +@recipe function f(vol::AbstractArray{T, 3}, args...) where T<:Union{Number,Missing} seriestype := :volume SliceIt, nothing, Volume(vol, args...), nothing end -# # images - grays -function clamp_greys!(mat::AMat{T}) where T<:Gray +# images - grays +function clamp_greys!(mat::AMat{<:Gray}) for i in eachindex(mat) mat[i].val < 0 && (mat[i] = Gray(0)) mat[i].val > 1 && (mat[i] = Gray(1)) @@ -366,7 +361,7 @@ function clamp_greys!(mat::AMat{T}) where T<:Gray mat end -@recipe function f(mat::AMat{T}) where T<:Gray +@recipe function f(mat::AMat{<:Gray}) n, m = axes(mat) if is_seriestype_supported(:image) seriestype := :image @@ -381,8 +376,7 @@ end end end -# # images - colors - +# images - colors @recipe function f(mat::AMat{T}) where T<:Colorant n, m = axes(mat) @@ -400,8 +394,8 @@ end end end -# -# # plotting arbitrary shapes/polygons + +# plotting arbitrary shapes/polygons @recipe function f(shape::Shape) seriestype --> :shape @@ -461,14 +455,14 @@ function tryrange(F, vec) end error("$F is not a Function, or is not defined at any of the values $vec") end -# -# # -------------------------------------------------------------------- -# # 2 arguments -# # -------------------------------------------------------------------- -# -# -# # if functions come first, just swap the order (not to be confused with parametric functions... -# # as there would be more than one function passed in) + +# -------------------------------------------------------------------- +# 2 arguments +# -------------------------------------------------------------------- + + +# if functions come first, just swap the order (not to be confused with parametric +# functions... as there would be more than one function passed in) @recipe function f(f::FuncOrFuncs{F}, x) where F<:Function F2 = typeof(x) @@ -476,47 +470,33 @@ end x, f end -# -# # -------------------------------------------------------------------- -# # 3 arguments -# # -------------------------------------------------------------------- -# -# -# # 3d line or scatter + +# -------------------------------------------------------------------- +# 3 arguments +# -------------------------------------------------------------------- + + +# 3d line or scatter @recipe function f(x::AVec, y::AVec, z::AVec) - # st = get(plotattributes, :seriestype, :none) - # if st == :scatter - # plotattributes[:seriestype] = :scatter3d - # elseif !is3d(st) - # plotattributes[:seriestype] = :path3d - # end SliceIt, x, y, z end @recipe function f(x::AMat, y::AMat, z::AMat) - # st = get(plotattributes, :seriestype, :none) - # if size(x) == size(y) == size(z) - # if !is3d(st) - # seriestype := :path3d - # end - # end wrap_surfaces(plotattributes) SliceIt, x, y, z end -# -# # surface-like... function + +# surface-like... function @recipe function f(x::AVec, y::AVec, zf::Function) - # x = X <: Number ? sort(x) : x - # y = Y <: Number ? sort(y) : y wrap_surfaces(plotattributes) SliceIt, x, y, Surface(zf, x, y) # TODO: replace with SurfaceFunction when supported end -# -# # surface-like... matrix grid + +# surface-like... matrix grid @recipe function f(x::AVec, y::AVec, z::AMat) if !like_surface(get(plotattributes, :seriestype, :none)) @@ -526,7 +506,7 @@ end SliceIt, x, y, Surface(z) end -# # images - grays +# images - grays @recipe function f(x::AVec, y::AVec, mat::AMat{T}) where T<:Gray if is_seriestype_supported(:image) @@ -542,7 +522,7 @@ end end end -# # images - colors +# images - colors @recipe function f(x::AVec, y::AVec, mat::AMat{T}) where T<:Colorant if is_seriestype_supported(:image) @@ -558,14 +538,12 @@ end end end -# -# -# # -------------------------------------------------------------------- -# # Parametric functions -# # -------------------------------------------------------------------- -# -# # special handling... xmin/xmax with parametric function(s) +# -------------------------------------------------------------------- +# Parametric functions +# -------------------------------------------------------------------- + +# special handling... xmin/xmax with parametric function(s) @recipe function f(f::Function, xmin::Number, xmax::Number) xscale, yscale = [get(plotattributes, sym, :identity) for sym=(:xscale,:yscale)] _scaled_adapted_grid(f, xscale, yscale, xmin, xmax) @@ -589,8 +567,8 @@ function _scaled_adapted_grid(f, xscale, yscale, xmin, xmax) xinv.(xs), yinv.(ys) end -# -# # special handling... 3D parametric function(s) + +# special handling... 3D parametric function(s) @recipe function f(fx::FuncOrFuncs{F}, fy::FuncOrFuncs{G}, fz::FuncOrFuncs{H}, u::AVec) where {F<:Function,G<:Function,H<:Function} mapFuncOrFuncs(fx, u), mapFuncOrFuncs(fy, u), mapFuncOrFuncs(fz, u) end @@ -598,12 +576,12 @@ end fx, fy, fz, range(umin, stop = umax, length = numPoints) end -# -# -# # -------------------------------------------------------------------- -# # Lists of tuples and GeometryTypes.Points -# # -------------------------------------------------------------------- -# + + +# -------------------------------------------------------------------- +# Lists of tuples and GeometryTypes.Points +# -------------------------------------------------------------------- + @recipe f(v::AVec{<:Tuple}) = unzip(v) @recipe f(v::AVec{<:GeometryTypes.Point}) = unzip(v) @@ -613,23 +591,10 @@ end # Special case for 4-tuples in :ohlc series @recipe f(xyuv::AVec{<:Tuple{R1,R2,R3,R4}}) where {R1,R2,R3,R4} = get(plotattributes,:seriestype,:path)==:ohlc ? OHLC[OHLC(t...) for t in xyuv] : unzip(xyuv) -# -# # -------------------------------------------------------------------- -# # handle grouping -# # -------------------------------------------------------------------- -# @recipe function f(groupby::GroupBy, args...) -# for (i,glab) in enumerate(groupby.groupLabels) -# # create a new series, with the label of the group, and an idxfilter (to be applied in slice_and_dice) -# # TODO: use @series instead -# @show i, glab, groupby.groupIds[i] -# di = copy(plotattributes) -# get!(di, :label, string(glab)) -# get!(di, :idxfilter, groupby.groupIds[i]) -# push!(series_list, RecipeData(di, args)) -# end -# nothing -# end +# -------------------------------------------------------------------- +# handle grouping +# -------------------------------------------------------------------- splittable_kw(key, val, lengthGroup) = false splittable_kw(key, val::AbstractArray, lengthGroup) = !(key in (:group, :color_palette)) && length(axes(val,1)) == lengthGroup From d98262bc08635f3fb60855d002b61c5132e25908 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Wed, 1 Apr 2020 12:08:32 +0200 Subject: [PATCH 08/15] apply type recipes also for series --- src/series.jl | 106 +++++++++++++++++++++++++++----------------------- 1 file changed, 58 insertions(+), 48 deletions(-) diff --git a/src/series.jl b/src/series.jl index 4aa4561a..5b6749ad 100644 --- a/src/series.jl +++ b/src/series.jl @@ -106,10 +106,16 @@ compute_xyz(x::Nothing, y::Nothing, z::Nothing) = error("x/y/z are all no # we are going to build recipes to do the processing and splitting of the args +# -------------------------------------------------------------------- +# The catch-all SliceIt recipe +# -------------------------------------------------------------------- + # ensure we dispatch to the slicer struct SliceIt end -# the catch-all recipes +# The `SliceIt` recipe finishes user and type recipe processing. +# It splits processed data into individual series data, stores in copied `plotattributes` +# for each series and returns no arguments. @recipe function f(::Type{SliceIt}, x, y, z) # handle data with formatting attached @@ -130,7 +136,6 @@ struct SliceIt end ys = series_vector(y, plotattributes) zs = series_vector(z, plotattributes) - fr = pop!(plotattributes, :fillrange, nothing) fillranges = process_fillrange(fr, plotattributes) mf = length(fillranges) @@ -139,8 +144,6 @@ struct SliceIt end ribbons = process_ribbon(rib, plotattributes) mr = length(ribbons) - # @show zs - mx = length(xs) my = length(ys) mz = length(zs) @@ -165,6 +168,11 @@ struct SliceIt end nothing # don't add a series for the main block end + +# -------------------------------------------------------------------- +# Apply type recipes +# -------------------------------------------------------------------- + # this is the default "type recipe"... just pass the object through @recipe f(::Type{T}, v::T) where {T<:Any} = v @@ -216,8 +224,9 @@ function _apply_type_recipe(plotattributes, v::Surface) end end -# don't do anything for ints or floats +# don't do anything for datapoints or nothing _apply_type_recipe(plotattributes, v::AbstractArray{<:DataPoint}, letter) = v +_apply_type_recipe(plotattributes, v::Nothing, leter) = v # axis args before type recipes should still be mapped to all axes function _preprocess_axis_args!(plotattributes) @@ -250,8 +259,14 @@ function _postprocess_axis_args!(plotattributes, letter) end end + +# -------------------------------------------------------------------- +# Fallback user recipes calling type recipes +# -------------------------------------------------------------------- + # handle "type recipes" by converting inputs, and then either re-calling or slicing @recipe function f(x, y, z) + wrap_surfaces!(plotattributes, x, y, z) did_replace = false newx = _apply_type_recipe(plotattributes, x, :x) x === newx || (did_replace = true) @@ -266,6 +281,7 @@ end end end @recipe function f(x, y) + wrap_surfaces!(plotattributes, x, y) did_replace = false newx = _apply_type_recipe(plotattributes, x, :x) x === newx || (did_replace = true) @@ -278,6 +294,7 @@ end end end @recipe function f(y) + wrap_surfaces!(plotattribute, y) newy = _apply_type_recipe(plotattributes, y, :y) if y !== newy newy @@ -304,12 +321,14 @@ end end -# -------------------------------------------------------------------- -# 1 argument -# -------------------------------------------------------------------- - # helper function to ensure relevant attributes are wrapped by Surface -function wrap_surfaces(plotattributes::AKW) +function wrap_surfaces!(plotattributes, args...) end +wrap_surfaces!(plotattributes, x::AMat, y::AMat, z::AMat) = wrap_surfaces!(plotattributes) +wrap_surfaces!(plotattributes, x::AVec, y::AVec, z::AMat) = wrap_surfaces!(plotattributes) +function wrap_surfaces!(plotattributes, x::AVec, y::AVec, z::Surface) + wrap_surfaces!(plotattributes) +end +function wrap_surfaces!(plotattributes) if haskey(plotattributes, :fill_z) v = plotattributes[:fill_z] if !isa(v, Surface) @@ -318,18 +337,34 @@ function wrap_surfaces(plotattributes::AKW) end end + +# -------------------------------------------------------------------- +# 1 argument +# -------------------------------------------------------------------- + @recipe f(n::Integer) = is3d(get(plotattributes,:seriestype,:path)) ? (SliceIt, n, n, n) : (SliceIt, n, n, nothing) -all3D(plotattributes) = trueOrAllTrue(st -> st in (:contour, :contourf, :heatmap, :surface, :wireframe, :contour3d, :image, :plots_heatmap), get(plotattributes, :seriestype, :none)) +all3D(plotattributes) = all( + st -> st in ( + :contour, + :contourf, + :heatmap, + :surface, + :wireframe, + :contour3d, + :image, + :plots_heatmap, + ), + get(plotattributes, :seriestype, :none), +) # return a surface if this is a 3d plot, otherwise let it be sliced up -@recipe function f(mat::AMat{<:MaybeNumber}) +@recipe function f(mat::AMat) if all3D(plotattributes) - n,m = axes(mat) - wrap_surfaces(plotattributes) - SliceIt, m, n, Surface(mat) + n, m = axes(mat) + m, n, Surface(mat) else - SliceIt, nothing, mat, nothing + nothing, mat, nothing end end @@ -337,16 +372,15 @@ end @recipe function f(fmt::Formatted{<:AMat}) if all3D(plotattributes) mat = fmt.data - n,m = axes(mat) - wrap_surfaces(plotattributes) - SliceIt, m, n, Formatted(Surface(mat), fmt.formatter) + n, m = axes(mat) + m, n, Formatted(Surface(mat), fmt.formatter) else - SliceIt, nothing, fmt, nothing + nothing, fmt, nothing end end # assume this is a Volume, so construct one -@recipe function f(vol::AbstractArray{T, 3}, args...) where T<:Union{Number,Missing} +@recipe function f(vol::AbstractArray{<:MaybeNumber, 3}, args...) seriestype := :volume SliceIt, nothing, Volume(vol, args...), nothing end @@ -394,7 +428,6 @@ end end end - # plotting arbitrary shapes/polygons @recipe function f(shape::Shape) @@ -456,11 +489,11 @@ function tryrange(F, vec) error("$F is not a Function, or is not defined at any of the values $vec") end + # -------------------------------------------------------------------- # 2 arguments # -------------------------------------------------------------------- - # if functions come first, just swap the order (not to be confused with parametric # functions... as there would be more than one function passed in) @@ -475,39 +508,20 @@ end # 3 arguments # -------------------------------------------------------------------- - -# 3d line or scatter - -@recipe function f(x::AVec, y::AVec, z::AVec) - SliceIt, x, y, z -end - -@recipe function f(x::AMat, y::AMat, z::AMat) - wrap_surfaces(plotattributes) - SliceIt, x, y, z -end - - # surface-like... function - @recipe function f(x::AVec, y::AVec, zf::Function) - wrap_surfaces(plotattributes) - SliceIt, x, y, Surface(zf, x, y) # TODO: replace with SurfaceFunction when supported + x, y, Surface(zf, x, y) # TODO: replace with SurfaceFunction when supported end - # surface-like... matrix grid - @recipe function f(x::AVec, y::AVec, z::AMat) if !like_surface(get(plotattributes, :seriestype, :none)) plotattributes[:seriestype] = :contour end - wrap_surfaces(plotattributes) - SliceIt, x, y, Surface(z) + x, y, Surface(z) end # images - grays - @recipe function f(x::AVec, y::AVec, mat::AMat{T}) where T<:Gray if is_seriestype_supported(:image) seriestype := :image @@ -523,7 +537,6 @@ end end # images - colors - @recipe function f(x::AVec, y::AVec, mat::AMat{T}) where T<:Colorant if is_seriestype_supported(:image) seriestype := :image @@ -567,7 +580,6 @@ function _scaled_adapted_grid(f, xscale, yscale, xmin, xmax) xinv.(xs), yinv.(ys) end - # special handling... 3D parametric function(s) @recipe function f(fx::FuncOrFuncs{F}, fy::FuncOrFuncs{G}, fz::FuncOrFuncs{H}, u::AVec) where {F<:Function,G<:Function,H<:Function} mapFuncOrFuncs(fx, u), mapFuncOrFuncs(fy, u), mapFuncOrFuncs(fz, u) @@ -577,12 +589,10 @@ end end - # -------------------------------------------------------------------- # Lists of tuples and GeometryTypes.Points # -------------------------------------------------------------------- - @recipe f(v::AVec{<:Tuple}) = unzip(v) @recipe f(v::AVec{<:GeometryTypes.Point}) = unzip(v) @recipe f(tup::Tuple) = [tup] From e53f27c2240a45feb9a994717a893be05ea3e695 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Wed, 1 Apr 2020 12:54:40 +0200 Subject: [PATCH 09/15] add axes function for surfaces --- src/components.jl | 4 ++-- src/series.jl | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components.jl b/src/components.jl index c87fa50f..5eebfff1 100644 --- a/src/components.jl +++ b/src/components.jl @@ -661,8 +661,8 @@ Surface(f::Function, x, y) = Surface(Float64[f(xi,yi) for yi in y, xi in x]) Base.Array(surf::Surface) = surf.surf -for f in (:length, :size) - @eval Base.$f(surf::Surface, args...) = $f(surf.surf, args...) +for f in (:length, :size, :axes) + @eval Base.$f(surf::Surface, args...) = $f(surf.surf, args...) end Base.copy(surf::Surface) = Surface(copy(surf.surf)) Base.eltype(surf::Surface{T}) where {T} = eltype(T) diff --git a/src/series.jl b/src/series.jl index 5b6749ad..f646469b 100644 --- a/src/series.jl +++ b/src/series.jl @@ -344,7 +344,7 @@ end @recipe f(n::Integer) = is3d(get(plotattributes,:seriestype,:path)) ? (SliceIt, n, n, n) : (SliceIt, n, n, nothing) -all3D(plotattributes) = all( +all3D(plotattributes) = trueOrAllTrue( st -> st in ( :contour, :contourf, From 974c6e5950109b8699f7cb6882c688530acb1418 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Wed, 1 Apr 2020 13:13:06 +0200 Subject: [PATCH 10/15] update precompile.jl --- src/precompile.jl | 208 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 204 insertions(+), 4 deletions(-) diff --git a/src/precompile.jl b/src/precompile.jl index 5f377a1e..5e7bc16e 100644 --- a/src/precompile.jl +++ b/src/precompile.jl @@ -5,12 +5,12 @@ function _precompile_() isdefined(Plots, Symbol("#_make_hist##kw")) && precompile(Tuple{getfield(Plots, Symbol("#_make_hist##kw")), NamedTuple{(:normed, :weights), Tuple{Bool, Nothing}}, typeof(Plots._make_hist), Tuple{Array{Float64, 1}, Array{Float64, 1}}, Int64}) isdefined(Plots, Symbol("#_make_hist##kw")) && precompile(Tuple{getfield(Plots, Symbol("#_make_hist##kw")), NamedTuple{(:normed, :weights), Tuple{Bool, Nothing}}, typeof(Plots._make_hist), Tuple{Array{Float64, 1}, Array{Float64, 1}}, Tuple{Int64, Int64}}) isdefined(Plots, Symbol("#_make_hist##kw")) && precompile(Tuple{getfield(Plots, Symbol("#_make_hist##kw")), NamedTuple{(:normed, :weights), Tuple{Bool, Nothing}}, typeof(Plots._make_hist), Tuple{Array{Float64, 1}}, Symbol}) - isdefined(Plots, Symbol("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:foreground_color_grid, :grid, :gridalpha, :gridstyle, :gridlinewidth), Tuple{ColorTypes.RGBA{Float64}, Bool, Float64, Symbol, Int64}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:formatter,), Tuple{Symbol}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:grid, :lims), Tuple{Bool, Tuple{Int64, Int64}}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:grid, :lims, :flip), Tuple{Bool, Tuple{Int64, Int64}, Bool}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:grid, :ticks), Tuple{Bool, Nothing}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:grid,), Tuple{Bool}}, typeof(Plots.attr!), Plots.Axis}) + isdefined(Plots, Symbol("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:gridlinewidth, :grid, :gridalpha, :gridstyle, :foreground_color_grid), Tuple{Int64, Bool, Float64, Symbol, ColorTypes.RGBA{Float64}}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:guide,), Tuple{String}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:lims, :flip, :ticks, :guide), Tuple{Tuple{Int64, Int64}, Bool, Base.StepRange{Int64, Int64}, String}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:lims,), Tuple{Tuple{Float64, Float64}}}, typeof(Plots.attr!), Plots.Axis}) @@ -21,6 +21,7 @@ function _precompile_() isdefined(Plots, Symbol("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:ticks,), Tuple{Base.UnitRange{Int64}}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:ticks,), Tuple{Nothing}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#contour##kw")) && precompile(Tuple{getfield(Plots, Symbol("#contour##kw")), NamedTuple{(:fill,), Tuple{Bool}}, typeof(Plots.contour), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Int}) + isdefined(Plots, Symbol("#default##kw")) && precompile(Tuple{getfield(Plots, Symbol("#default##kw")), NamedTuple{(:titlefont, :legendfontsize, :guidefont, :tickfont, :guide, :framestyle, :yminorgrid), Tuple{Tuple{Int64, String}, Int64, Tuple{Int64, Symbol}, Tuple{Int64, Symbol}, String, Symbol, Bool}}, typeof(Plots.default)}) isdefined(Plots, Symbol("#gr_polyline##kw")) && precompile(Tuple{getfield(Plots, Symbol("#gr_polyline##kw")), NamedTuple{(:arrowside, :arrowstyle), Tuple{Symbol, Symbol}}, typeof(Plots.gr_polyline), Array{Float64, 1}, Array{Float64, 1}}) isdefined(Plots, Symbol("#gr_polyline##kw")) && precompile(Tuple{getfield(Plots, Symbol("#gr_polyline##kw")), NamedTuple{(:arrowside, :arrowstyle), Tuple{Symbol, Symbol}}, typeof(Plots.gr_polyline), Array{Int64, 1}, Array{Float64, 1}}) isdefined(Plots, Symbol("#gr_polyline##kw")) && precompile(Tuple{getfield(Plots, Symbol("#gr_polyline##kw")), NamedTuple{(:arrowside, :arrowstyle), Tuple{Symbol, Symbol}}, typeof(Plots.gr_polyline), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}) @@ -54,9 +55,12 @@ function _precompile_() precompile(Tuple{typeof(Plots._add_smooth_kw), Array{Base.Dict{Symbol, Any}, 1}, Base.Dict{Symbol, Any}}) precompile(Tuple{typeof(Plots._add_the_series), Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}, Plots.Attr}) precompile(Tuple{typeof(Plots._add_the_series), Plots.Plot{Plots.PlotlyBackend}, Plots.Subplot{Plots.PlotlyBackend}, Plots.Attr}) + precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, Array{Any, 1}, Symbol}) precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, Array{Array{Float64, 1}, 1}, Symbol}) precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, Array{Array{T, 1} where T, 1}, Symbol}) precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, Array{Function, 1}, Symbol}) + precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, Int64, Symbol}) + precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, Plots.Surface{Array{Float64, 2}}, Symbol}) precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, typeof(identity), Symbol}) precompile(Tuple{typeof(Plots._backend_instance), Symbol}) precompile(Tuple{typeof(Plots._bin_centers), Array{Float64, 1}}) @@ -103,6 +107,7 @@ function _precompile_() precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{Float64, 2}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{Function, 1}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{Function, 1}, Float64, Float64}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{Function, 1}, Int64}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{Int64, 1}, Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{Int64, 1}}}) @@ -125,6 +130,7 @@ function _precompile_() precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{Float64, 2}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{Function, 1}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{Function, 1}, Float64, Float64}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{Function, 1}, Int64}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{Int64, 1}, Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{Int64, 1}}}) @@ -166,6 +172,7 @@ function _precompile_() precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 2}}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Function, 1}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Function, 1}, Float64, Float64}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Function, 1}, Int64}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Int64, 1}, Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Int64, 1}}}) @@ -190,6 +197,7 @@ function _precompile_() precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}, Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Function, 1}, Float64, Float64}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Int64, 1}, Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Int64, 1}}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Plots.OHLC{T} where T<:Real, 1}}}) @@ -223,6 +231,7 @@ function _precompile_() precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}}, Array{RecipesBase.RecipeData, 1}}) precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Float64, 2}}, Array{RecipesBase.RecipeData, 1}}) precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Function, 1}, Array{Float64, 1}}, Array{RecipesBase.RecipeData, 1}}) + precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Function, 1}, Float64, Float64}, Array{RecipesBase.RecipeData, 1}}) precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Function, 1}, Int64}, Array{RecipesBase.RecipeData, 1}}) precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Int64, 1}, Array{Float64, 1}}, Array{RecipesBase.RecipeData, 1}}) precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Int64, 1}}, Array{RecipesBase.RecipeData, 1}}) @@ -261,6 +270,7 @@ function _precompile_() precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 2}}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Function, 1}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Function, 1}, Float64, Float64}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Function, 1}, Int64}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Int64, 1}, Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Int64, 1}}}) @@ -285,6 +295,7 @@ function _precompile_() precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}, Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Function, 1}, Float64, Float64}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Int64, 1}, Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Int64, 1}}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Plots.OHLC{T} where T<:Real, 1}}}) @@ -304,6 +315,7 @@ function _precompile_() precompile(Tuple{typeof(Plots._replace_markershape), Array{Symbol, 2}}) precompile(Tuple{typeof(Plots._replace_markershape), Plots.Shape}) precompile(Tuple{typeof(Plots._scale_adjusted_values), Type{Float64}, Array{Float64, 1}, Symbol}) + precompile(Tuple{typeof(Plots._scaled_adapted_grid), typeof(identity), Symbol, Symbol, Float64, Float64}) precompile(Tuple{typeof(Plots._series_index), Plots.Attr, Plots.Subplot{Plots.GRBackend}}) precompile(Tuple{typeof(Plots._series_index), Plots.Attr, Plots.Subplot{Plots.PlotlyBackend}}) precompile(Tuple{typeof(Plots._show), Base.IOStream, Base.Multimedia.MIME{Symbol("image/png")}, Plots.Plot{Plots.GRBackend}}) @@ -356,7 +368,6 @@ function _precompile_() precompile(Tuple{typeof(Plots.annotate!), Array{Tuple{Int64, Float64, Plots.PlotText}, 1}}) precompile(Tuple{typeof(Plots.annotations), Array{Any, 1}}) precompile(Tuple{typeof(Plots.arrow), Int64}) - precompile(Tuple{typeof(Plots.attr!), Plots.Axis}) precompile(Tuple{typeof(Plots.attr), Plots.EmptyLayout, Symbol, Symbol}) precompile(Tuple{typeof(Plots.attr), Plots.EmptyLayout, Symbol}) precompile(Tuple{typeof(Plots.autopick), Array{ColorTypes.RGBA{Float64}, 1}, Int64}) @@ -419,6 +430,10 @@ function _precompile_() precompile(Tuple{typeof(Plots.create_grid), Symbol}) precompile(Tuple{typeof(Plots.create_grid_curly), Expr}) precompile(Tuple{typeof(Plots.create_grid_vcat), Expr}) + precompile(Tuple{typeof(Plots.default), Symbol, Bool}) + precompile(Tuple{typeof(Plots.default), Symbol, Int64}) + precompile(Tuple{typeof(Plots.default), Symbol, String}) + precompile(Tuple{typeof(Plots.default), Symbol, Symbol}) precompile(Tuple{typeof(Plots.default), Symbol}) precompile(Tuple{typeof(Plots.default_should_widen), Plots.Axis}) precompile(Tuple{typeof(Plots.discrete_value!), Plots.Axis, Array{String, 1}}) @@ -601,6 +616,8 @@ function _precompile_() precompile(Tuple{typeof(Plots.is_2tuple), Tuple{Int64, Int64}}) precompile(Tuple{typeof(Plots.is_2tuple), Tuple{Int64, Measures.BoundingBox{Tuple{Measures.Length{:w, Float64}, Measures.Length{:h, Float64}}, Tuple{Measures.Length{:w, Float64}, Measures.Length{:h, Float64}}}}}) precompile(Tuple{typeof(Plots.is_axis_attr), Symbol}) + precompile(Tuple{typeof(Plots.is_axis_attr_noletter), Symbol}) + precompile(Tuple{typeof(Plots.is_default_attribute), Symbol}) precompile(Tuple{typeof(Plots.is_marker_supported), Plots.GRBackend, Symbol}) precompile(Tuple{typeof(Plots.is_marker_supported), Plots.PlotlyBackend, Symbol}) precompile(Tuple{typeof(Plots.is_marker_supported), Plots.Shape}) @@ -608,11 +625,13 @@ function _precompile_() precompile(Tuple{typeof(Plots.is_marker_supported), Symbol}) precompile(Tuple{typeof(Plots.is_scale_supported), Plots.GRBackend, Symbol}) precompile(Tuple{typeof(Plots.is_scale_supported), Plots.PlotlyBackend, Symbol}) + precompile(Tuple{typeof(Plots.is_series_attr), Symbol}) precompile(Tuple{typeof(Plots.is_seriestype_supported), Plots.GRBackend, Symbol}) precompile(Tuple{typeof(Plots.is_seriestype_supported), Plots.PlotlyBackend, Symbol}) precompile(Tuple{typeof(Plots.is_seriestype_supported), Symbol}) precompile(Tuple{typeof(Plots.is_style_supported), Plots.GRBackend, Symbol}) precompile(Tuple{typeof(Plots.is_style_supported), Plots.PlotlyBackend, Symbol}) + precompile(Tuple{typeof(Plots.is_subplot_attr), Symbol}) precompile(Tuple{typeof(Plots.is_uniformly_spaced), Array{Float64, 1}}) precompile(Tuple{typeof(Plots.iscontour), Plots.Series}) precompile(Tuple{typeof(Plots.isijulia)}) @@ -671,7 +690,6 @@ function _precompile_() precompile(Tuple{typeof(Plots.optimal_ticks_and_labels), Plots.Subplot{Plots.GRBackend}, Plots.Axis, Base.StepRange{Int64, Int64}}) precompile(Tuple{typeof(Plots.optimal_ticks_and_labels), Plots.Subplot{Plots.GRBackend}, Plots.Axis, Base.UnitRange{Int64}}) precompile(Tuple{typeof(Plots.optimal_ticks_and_labels), Plots.Subplot{Plots.GRBackend}, Plots.Axis, Nothing}) - precompile(Tuple{typeof(Plots.optimal_ticks_and_labels), Plots.Subplot{Plots.PlotlyBackend}, Plots.Axis, Base.StepRange{Int64, Int64}}) precompile(Tuple{typeof(Plots.optimal_ticks_and_labels), Plots.Subplot{Plots.PlotlyBackend}, Plots.Axis, Base.UnitRange{Int64}}) precompile(Tuple{typeof(Plots.optimal_ticks_and_labels), Plots.Subplot{Plots.PlotlyBackend}, Plots.Axis, Nothing}) precompile(Tuple{typeof(Plots.parse_axis_kw), Symbol}) @@ -747,6 +765,9 @@ function _precompile_() precompile(Tuple{typeof(Plots.processFillArg), Base.Dict{Symbol, Any}, Bool}) precompile(Tuple{typeof(Plots.processFillArg), Base.Dict{Symbol, Any}, Int64}) precompile(Tuple{typeof(Plots.processFillArg), Base.Dict{Symbol, Any}, Symbol}) + precompile(Tuple{typeof(Plots.processFontArg!), Base.Dict{Symbol, Any}, Symbol, Int64}) + precompile(Tuple{typeof(Plots.processFontArg!), Base.Dict{Symbol, Any}, Symbol, String}) + precompile(Tuple{typeof(Plots.processFontArg!), Base.Dict{Symbol, Any}, Symbol, Symbol}) precompile(Tuple{typeof(Plots.processGridArg!), Base.Dict{Symbol, Any}, Bool, Symbol}) precompile(Tuple{typeof(Plots.processGridArg!), Base.Dict{Symbol, Any}, Float64, Symbol}) precompile(Tuple{typeof(Plots.processGridArg!), Base.Dict{Symbol, Any}, Int64, Symbol}) @@ -764,6 +785,7 @@ function _precompile_() precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, Plots.Shape}) precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, Plots.Stroke}) precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, Symbol}) + precompile(Tuple{typeof(Plots.processMinorGridArg!), Base.Dict{Symbol, Any}, Bool, Symbol}) precompile(Tuple{typeof(Plots.process_annotation), Plots.Subplot{Plots.GRBackend}, Int64, Float64, Plots.PlotText, Plots.Font}) precompile(Tuple{typeof(Plots.process_annotation), Plots.Subplot{Plots.GRBackend}, Int64, Float64, Plots.PlotText}) precompile(Tuple{typeof(Plots.process_annotation), Plots.Subplot{Plots.PlotlyBackend}, Int64, Float64, Plots.PlotText, Plots.Font}) @@ -794,6 +816,7 @@ function _precompile_() precompile(Tuple{typeof(Plots.series_annotations), Plots.SeriesAnnotations}) precompile(Tuple{typeof(Plots.series_annotations_shapes!), Plots.Series, Symbol}) precompile(Tuple{typeof(Plots.series_idx), Array{Base.Dict{Symbol, Any}, 1}, Base.Dict{Symbol, Any}}) + precompile(Tuple{typeof(Plots.series_vector), Array{Any, 1}, Base.Dict{Symbol, Any}}) precompile(Tuple{typeof(Plots.series_vector), Array{Array{Float64, 1}, 1}, Base.Dict{Symbol, Any}}) precompile(Tuple{typeof(Plots.series_vector), Array{Array{T, 1} where T, 1}, Base.Dict{Symbol, Any}}) precompile(Tuple{typeof(Plots.series_vector), Array{Float64, 2}, Base.Dict{Symbol, Any}}) @@ -878,8 +901,184 @@ function _precompile_() precompile(Tuple{typeof(Plots.warnOnUnsupported_args), Plots.PlotlyBackend, Plots.Attr}) precompile(Tuple{typeof(Plots.warnOnUnsupported_scales), Plots.GRBackend, Base.Dict{Symbol, Any}}) precompile(Tuple{typeof(Plots.warnOnUnsupported_scales), Plots.PlotlyBackend, Base.Dict{Symbol, Any}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Symbol}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{Any, 1}, Array{Any, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{Array{Float64, 1}, 1}, Array{Array{Float64, 1}, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{Array{T, 1} where T, 1}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{Array{T, 1} where T, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{Base.Complex{Float64}, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{Float64, 1}, Array{Float64, 1}, Base.UnitRange{Int64}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{Float64, 1}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{Float64, 1}, Array{Function, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{Function, 1}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{Function, 1}, Float64, Float64}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{Function, 1}, Int64}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{Int64, 1}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{Int64, 1}, Array{Real, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{Int64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{Plots.OHLC{T} where T<:Real, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{String, 1}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{String, 1}, Array{String, 1}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{String, 1}, Array{String, 1}, Plots.Surface{Array{Float64, 2}}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{Tuple{Int64, Real}, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Array{Union{Base.Missing, Int64}, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Plots.Surface{Array{Float64, 2}}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Base.StepRange{Int64, Int64}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Base.UnitRange{Int64}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Array{Any, 1}, Array{Any, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Array{Array{Float64, 1}, 1}, Array{Array{Float64, 1}, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Array{Array{T, 1} where T, 1}, Array{Float64, 2}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Array{Float64, 1}, Array{Float64, 1}, Base.UnitRange{Int64}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Array{Float64, 1}, Array{Float64, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Array{Float64, 1}, Array{Function, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Array{Int64, 1}, Array{Float64, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Array{Int64, 1}, Array{Real, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Array{String, 1}, Array{Float64, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Array{String, 1}, Array{String, 1}, Plots.Surface{Array{Float64, 2}}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 2}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Plots.Surface{Array{Float64, 2}}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Base.StepRange{Int64, Int64}, Array{Float64, 2}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Int64, Array{Function, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Int64, typeof(Base.log), Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Nothing, Array{Array{T, 1} where T, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Nothing, Array{Float64, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Nothing, Array{Float64, 2}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Nothing, Array{Int64, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Nothing, Array{Union{Base.Missing, Int64}, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{DataType, Nothing, Base.UnitRange{Int64}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Int64, Array{Function, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Int64, typeof(Base.log)}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Nothing, Array{Float64, 2}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Plots.GroupBy, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Plots.PortfolioComposition}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{Plots.Spy}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Array{RecipesBase.RecipeData, 1}, Symbol, Tuple{typeof(Base.log), Int64}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Symbol}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{Any, 1}, Array{Any, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{Array{Float64, 1}, 1}, Array{Array{Float64, 1}, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{Array{T, 1} where T, 1}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{Array{T, 1} where T, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{Base.Complex{Float64}, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{Float64, 1}, Array{Float64, 1}, Base.UnitRange{Int64}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{Float64, 1}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{Float64, 1}, Array{Function, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{Function, 1}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{Function, 1}, Float64, Float64}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{Function, 1}, Int64}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{Int64, 1}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{Int64, 1}, Array{Real, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{Int64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{Plots.OHLC{T} where T<:Real, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{String, 1}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{String, 1}, Array{String, 1}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{String, 1}, Array{String, 1}, Plots.Surface{Array{Float64, 2}}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{Tuple{Int64, Real}, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Array{Union{Base.Missing, Int64}, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Plots.Surface{Array{Float64, 2}}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Base.StepRange{Int64, Int64}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Base.UnitRange{Int64}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Array{Any, 1}, Array{Any, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Array{Array{Float64, 1}, 1}, Array{Array{Float64, 1}, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Array{Array{T, 1} where T, 1}, Array{Float64, 2}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Array{Float64, 1}, Array{Float64, 1}, Base.UnitRange{Int64}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Array{Float64, 1}, Array{Float64, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Array{Float64, 1}, Array{Function, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Array{Int64, 1}, Array{Float64, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Array{Int64, 1}, Array{Real, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Array{String, 1}, Array{Float64, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Array{String, 1}, Array{String, 1}, Plots.Surface{Array{Float64, 2}}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 2}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Plots.Surface{Array{Float64, 2}}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Base.StepRange{Int64, Int64}, Array{Float64, 2}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Int64, Array{Function, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Int64, typeof(Base.log), Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Nothing, Array{Array{T, 1} where T, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Nothing, Array{Float64, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Nothing, Array{Float64, 2}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Nothing, Array{Int64, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Nothing, Array{Union{Base.Missing, Int64}, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{DataType, Nothing, Base.UnitRange{Int64}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Int64, Array{Function, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Int64, typeof(Base.log)}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Nothing, Array{Float64, 2}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Plots.GroupBy, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Plots.PortfolioComposition}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{Plots.Spy}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Tuple{typeof(Base.log), Int64}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Base.Dict{Symbol, Any}, Symbol, Type{Int}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), Plots.Attr, Symbol, Symbol}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Symbol}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{Any, 1}, Array{Any, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{Array{Float64, 1}, 1}, Array{Array{Float64, 1}, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{Array{T, 1} where T, 1}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{Array{T, 1} where T, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{Base.Complex{Float64}, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{Float64, 1}, Array{Float64, 1}, Base.UnitRange{Int64}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{Float64, 1}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{Float64, 1}, Array{Function, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{Function, 1}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{Function, 1}, Float64, Float64}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{Function, 1}, Int64}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{Int64, 1}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{Int64, 1}, Array{Real, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{Int64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{Plots.OHLC{T} where T<:Real, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{String, 1}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{String, 1}, Array{String, 1}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{String, 1}, Array{String, 1}, Plots.Surface{Array{Float64, 2}}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{Tuple{Int64, Real}, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Array{Union{Base.Missing, Int64}, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Plots.Surface{Array{Float64, 2}}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Base.StepRange{Int64, Int64}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Base.UnitRange{Int64}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Array{Any, 1}, Array{Any, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Array{Array{Float64, 1}, 1}, Array{Array{Float64, 1}, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Array{Array{T, 1} where T, 1}, Array{Float64, 2}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Array{Float64, 1}, Array{Float64, 1}, Base.UnitRange{Int64}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Array{Float64, 1}, Array{Float64, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Array{Float64, 1}, Array{Function, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Array{Int64, 1}, Array{Float64, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Array{Int64, 1}, Array{Real, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Array{String, 1}, Array{Float64, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Array{String, 1}, Array{String, 1}, Plots.Surface{Array{Float64, 2}}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 2}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Plots.Surface{Array{Float64, 2}}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Base.StepRange{Int64, Int64}, Array{Float64, 2}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Int64, Array{Function, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Int64, typeof(Base.log), Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Nothing, Array{Array{T, 1} where T, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Nothing, Array{Float64, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Nothing, Array{Float64, 2}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Nothing, Array{Int64, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Nothing, Array{Union{Base.Missing, Int64}, 1}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{DataType, Nothing, Base.UnitRange{Int64}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Int64, Array{Function, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Int64, typeof(Base.log)}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Nothing, Array{Float64, 2}, Nothing}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Plots.GroupBy, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Plots.PortfolioComposition}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{Plots.Spy}}) + precompile(Tuple{typeof(Plots.warn_on_recipe_aliases!), RecipesBase.RecipeData, Symbol, Tuple{typeof(Base.log), Int64}}) precompile(Tuple{typeof(Plots.widen), Float64, Float64, Symbol}) - precompile(Tuple{typeof(Plots.wrap_surfaces), Base.Dict{Symbol, Any}}) + precompile(Tuple{typeof(Plots.wrap_surfaces!), Base.Dict{Symbol, Any}}) precompile(Tuple{typeof(Plots.wraptuple), Array{Any, 1}}) precompile(Tuple{typeof(Plots.wraptuple), Array{Float64, 1}}) precompile(Tuple{typeof(Plots.wraptuple), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}) @@ -894,6 +1093,7 @@ function _precompile_() precompile(Tuple{typeof(Plots.wraptuple), Tuple{Int64, Array{Symbol, 2}}}) precompile(Tuple{typeof(Plots.wraptuple), Tuple{Int64, Float64, Symbol, Plots.Stroke}}) precompile(Tuple{typeof(Plots.wraptuple), Tuple{Int64, Float64, Symbol}}) + precompile(Tuple{typeof(Plots.wraptuple), Tuple{Int64, String}}) precompile(Tuple{typeof(Plots.wraptuple), Tuple{Int64, Symbol, Float64, Array{Symbol, 2}}}) precompile(Tuple{typeof(Plots.wraptuple), Tuple{Int64, Symbol, Symbol}}) precompile(Tuple{typeof(Plots.wraptuple), Tuple{Int64, Symbol}}) From 5e7d2fb8baa1b8cd75fe7b64f86b998f36c5487e Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Wed, 1 Apr 2020 13:26:01 +0200 Subject: [PATCH 11/15] add test example --- src/examples.jl | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/examples.jl b/src/examples.jl index a1592df8..ff55b586 100644 --- a/src/examples.jl +++ b/src/examples.jl @@ -919,6 +919,21 @@ const _examples = PlotExample[ end, ], ), + PlotExample( + "Heatmap with DateTime axis", + "", + [ + quote + begin + using Dates + z = rand(5, 5) + x = DateTime.(2016:2020) + y = 1:5 + heatmap(x, y, z) + end + end, + ], + ), ] # Some constants for PlotDocs and PlotReferenceImages From 1faa858690d9d9f07740aa81d8e6111ed63d1d14 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Wed, 1 Apr 2020 13:28:32 +0200 Subject: [PATCH 12/15] fix typo --- src/series.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/series.jl b/src/series.jl index f646469b..b08ce392 100644 --- a/src/series.jl +++ b/src/series.jl @@ -226,7 +226,7 @@ end # don't do anything for datapoints or nothing _apply_type_recipe(plotattributes, v::AbstractArray{<:DataPoint}, letter) = v -_apply_type_recipe(plotattributes, v::Nothing, leter) = v +_apply_type_recipe(plotattributes, v::Nothing, letter) = v # axis args before type recipes should still be mapped to all axes function _preprocess_axis_args!(plotattributes) From 9f375aef09965f5c4036dc202b9a7a115cc2718a Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Wed, 1 Apr 2020 14:24:34 +0200 Subject: [PATCH 13/15] fix single argument recipe --- src/series.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/series.jl b/src/series.jl index b08ce392..c6a90590 100644 --- a/src/series.jl +++ b/src/series.jl @@ -294,7 +294,7 @@ end end end @recipe function f(y) - wrap_surfaces!(plotattribute, y) + wrap_surfaces!(plotattributes, y) newy = _apply_type_recipe(plotattributes, y, :y) if y !== newy newy From bf98db67a3cde215a6cbbad2e0016e7c37bfb639 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Wed, 1 Apr 2020 17:32:31 +0200 Subject: [PATCH 14/15] fix type recipes for other backends --- src/args.jl | 1 + 1 file changed, 1 insertion(+) diff --git a/src/args.jl b/src/args.jl index 3b6e0339..e4f137af 100644 --- a/src/args.jl +++ b/src/args.jl @@ -656,6 +656,7 @@ function default(k::Symbol) letter, key = axis_k return _axis_defaults_byletter[letter][key] end + k == :letter && return k # for type recipe processing k in _suppress_warnings || error("Unknown key: ", k) end From 52522fde48324417c7c2bd3a9517405a619395f2 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Wed, 1 Apr 2020 19:27:41 +0200 Subject: [PATCH 15/15] splat `args` in `warn_on_recipe_alias` --- src/pipeline.jl | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/pipeline.jl b/src/pipeline.jl index 2659b74c..ccf1bedd 100644 --- a/src/pipeline.jl +++ b/src/pipeline.jl @@ -10,10 +10,12 @@ function warn_on_recipe_aliases!(plotattributes, recipe_type, args...) end end end -warn_on_recipe_aliases!(v::AbstractVector, recipe_type, args) = - foreach(x -> warn_on_recipe_aliases!(x, recipe_type, args), v) -warn_on_recipe_aliases!(rd::RecipeData, recipe_type, args) = - warn_on_recipe_aliases!(rd.plotattributes, recipe_type, args) +function warn_on_recipe_aliases!(v::AbstractVector, recipe_type, args...) + foreach(x -> warn_on_recipe_aliases!(x, recipe_type, args...), v) +end +function warn_on_recipe_aliases!(rd::RecipeData, recipe_type, args...) + warn_on_recipe_aliases!(rd.plotattributes, recipe_type, args...) +end function signature_string(::Type{Val{:user}}, args...) return string("(::", join(string.(typeof.(args)), ", ::"), ")") @@ -102,7 +104,7 @@ function _process_userrecipes(plt::Plot, plotattributes::AKW, args) next_series.plotattributes, next_series.args... ) - warn_on_recipe_aliases!(rd_list, :user, next_series.args) + warn_on_recipe_aliases!(rd_list, :user, next_series.args...) prepend!(still_to_process,rd_list) end end