From fa6f0a6b001beea5af73b230e9fb921eed1e376f Mon Sep 17 00:00:00 2001 From: Travis DePrato <773453+travigd@users.noreply.github.com> Date: Tue, 26 Nov 2019 12:55:27 -0500 Subject: [PATCH 01/77] Fix PlotlyJS integration with WebIO Fixes #2272. --- src/backends/plotlyjs.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backends/plotlyjs.jl b/src/backends/plotlyjs.jl index 5893ece3..7f86cc66 100644 --- a/src/backends/plotlyjs.jl +++ b/src/backends/plotlyjs.jl @@ -42,8 +42,8 @@ _display(plt::Plot{PlotlyJSBackend}) = display(plotlyjs_syncplot(plt)) @require WebIO = "0f1e0344-ec1d-5b48-a673-e5cf874b6c29" begin function WebIO.render(plt::Plot{PlotlyJSBackend}) - prepare_output(plt) - WebIO.render(plt.o) + plt_html = sprint(show, MIME("text/html"), x) + return WebIO.render(dom"div"(innerHTML=plt_html)) end end From bb9d36eb7a42b898e87fa1dd693f27b9d1881755 Mon Sep 17 00:00:00 2001 From: Josef Heinen Date: Fri, 13 Mar 2020 16:40:49 +0100 Subject: [PATCH 02/77] Update Project.toml --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 00c034e9..0d5241d4 100644 --- a/Project.toml +++ b/Project.toml @@ -34,7 +34,7 @@ UUIDs = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" Contour = "0.5" FFMPEG = "0.2, 0.3" FixedPointNumbers = "0.6, 0.7, 0.8" -GR = "0.46, 0.47" +GR = "0.46, 0.47, 0.48" GeometryTypes = "0.7, 0.8" JSON = "0.21" Measures = "0.3" From 3255c5a122a42c907d33f4f9b1a3d7cc5bb48045 Mon Sep 17 00:00:00 2001 From: Simon Christ Date: Sat, 14 Mar 2020 15:44:07 +0100 Subject: [PATCH 03/77] Allow legend vectors (#2449) * allow vector legends * format file pgfplotsx.jl * handle unmatching vectors * add test * format test_pgfplotsx.jl --- test/test_pgfplotsx.jl | 416 ++++++++++++++++++++++++++--------------- 1 file changed, 261 insertions(+), 155 deletions(-) diff --git a/test/test_pgfplotsx.jl b/test/test_pgfplotsx.jl index 91456fe3..0e81237e 100644 --- a/test/test_pgfplotsx.jl +++ b/test/test_pgfplotsx.jl @@ -1,166 +1,272 @@ using Plots, Test pgfplotsx() -function create_plot( args...; kwargs... ) - pgfx_plot = plot(args...; kwargs...) - return pgfx_plot, repr("application/x-tex", pgfx_plot) +function create_plot(args...; kwargs...) + pgfx_plot = plot(args...; kwargs...) + return pgfx_plot, repr("application/x-tex", pgfx_plot) end -function create_plot!( args...; kwargs... ) - pgfx_plot = plot!(args...; kwargs...) - return pgfx_plot, repr("application/x-tex", pgfx_plot) +function create_plot!(args...; kwargs...) + pgfx_plot = plot!(args...; kwargs...) + return pgfx_plot, repr("application/x-tex", pgfx_plot) end @testset "PGFPlotsX" begin - pgfx_plot = plot(1:5) - Plots._update_plot_object(pgfx_plot) - @test pgfx_plot.o.the_plot isa PGFPlotsX.TikzDocument - @test pgfx_plot.series_list[1].plotattributes[:quiver] === nothing - axis = Plots.pgfx_axes(pgfx_plot.o)[1] - @test count( x-> x isa PGFPlotsX.Plot, axis.contents ) == 1 - @test !haskey(axis.contents[1].options.dict, "fill") + pgfx_plot = plot(1:5) + Plots._update_plot_object(pgfx_plot) + @test pgfx_plot.o.the_plot isa PGFPlotsX.TikzDocument + @test pgfx_plot.series_list[1].plotattributes[:quiver] === nothing + axis = Plots.pgfx_axes(pgfx_plot.o)[1] + @test count(x -> x isa PGFPlotsX.Plot, axis.contents) == 1 + @test !haskey(axis.contents[1].options.dict, "fill") - @testset "3D docs example" begin - n = 100 - ts = range(0, stop=8π, length=n) - x = ts .* map(cos, ts) - y = (0.1ts) .* map(sin, ts) - z = 1:n - pl = plot(x, y, z, zcolor=reverse(z), m=(10, 0.8, :blues, Plots.stroke(0)), leg=false, cbar=true, w=5) - pgfx_plot = plot!(pl, zeros(n), zeros(n), 1:n, w=10) - Plots._update_plot_object(pgfx_plot) - if @test_nowarn(haskey(Plots.pgfx_axes(pgfx_plot.o)[1].options.dict, "colorbar") == true) - @test Plots.pgfx_axes(pgfx_plot.o)[1]["colorbar"] === nothing - end - end # testset - @testset "Color docs example" begin - y = rand(100) - plot(0:10:100, rand(11, 4), lab="lines", w=3, palette=:grays, fill=0, α=0.6) - pl = scatter!(y, zcolor=abs.(y .- 0.5), m=(:heat, 0.8, Plots.stroke(1, :green)), ms=10 * abs.(y .- 0.5) .+ 4, lab="grad") - Plots._update_plot_object(pl) - axis = Plots.pgfx_axes(pl.o)[1] - @test count( x->x isa PGFPlotsX.LegendEntry, axis.contents ) == 5 - @test count( x->x isa PGFPlotsX.Plot, axis.contents ) == 108 # each marker is its own plot, fillranges create 2 plot-objects - marker = axis.contents[15] - @test marker isa PGFPlotsX.Plot - @test marker.options["mark"] == "*" - @test marker.options["mark options"]["color"] == RGBA{Float64}( colorant"green", 0.8) - @test marker.options["mark options"]["line width"] == 1 - end # testset - @testset "Plot in pieces" begin - plot(rand(100) / 3, reg=true, fill=(0, :green)) - scatter!(rand(100), markersize=6, c=:orange) - end # testset - @testset "Marker types" begin - markers = filter((m->begin - m in Plots.supported_markers() - end), Plots._shape_keys) - markers = reshape(markers, 1, length(markers)) - n = length(markers) - x = (range(0, stop=10, length=n + 2))[2:end - 1] - y = repeat(reshape(reverse(x), 1, :), n, 1) - scatter(x, y, m=(8, :auto), lab=map(string, markers), bg=:linen, xlim=(0, 10), ylim=(0, 10)) - end # testset - @testset "Layout" begin - plot(Plots.fakedata(100, 10), layout=4, palette=[:grays :blues :heat :lightrainbow], bg_inside=[:orange :pink :darkblue :black]) - end # testset - @testset "Polar plots" begin - Θ = range(0, stop=1.5π, length=100) - r = abs.(0.1 * randn(100) + sin.(3Θ)) - plot(Θ, r, proj=:polar, m=2) - end # testset - @testset "Drawing shapes" begin - verts = [(-1.0, 1.0), (-1.28, 0.6), (-0.2, -1.4), (0.2, -1.4), (1.28, 0.6), (1.0, 1.0), (-1.0, 1.0), (-0.2, -0.6), (0.0, -0.2), (-0.4, 0.6), (1.28, 0.6), (0.2, -1.4), (-0.2, -1.4), (0.6, 0.2), (-0.2, 0.2), (0.0, -0.2), (0.2, 0.2), (-0.2, -0.6)] - x = 0.1:0.2:0.9 - y = 0.7 * rand(5) .+ 0.15 - plot(x, y, line=(3, :dash, :lightblue), marker=(Shape(verts), 30, RGBA(0, 0, 0, 0.2)), bg=:pink, fg=:darkblue, xlim=(0, 1), ylim=(0, 1), leg=false) - end # testset - @testset "Histogram 2D" begin - histogram2d(randn(10000), randn(10000), nbins=20) - end # testset - @testset "Heatmap-like" begin - xs = [string("x", i) for i = 1:10] - ys = [string("y", i) for i = 1:4] - z = float((1:4) * reshape(1:10, 1, :)) - pgfx_plot = heatmap(xs, ys, z, aspect_ratio=1) - Plots._update_plot_object(pgfx_plot) - if @test_nowarn(haskey(Plots.pgfx_axes(pgfx_plot.o)[1].options.dict, "colorbar") == true) - @test Plots.pgfx_axes(pgfx_plot.o)[1]["colorbar"] === nothing - @test Plots.pgfx_axes(pgfx_plot.o)[1]["colormap name"] == "plots1" - end + @testset "3D docs example" begin + n = 100 + ts = range(0, stop = 8π, length = n) + x = ts .* map(cos, ts) + y = (0.1ts) .* map(sin, ts) + z = 1:n + pl = plot( + x, + y, + z, + zcolor = reverse(z), + m = (10, 0.8, :blues, Plots.stroke(0)), + leg = false, + cbar = true, + w = 5, + ) + pgfx_plot = plot!(pl, zeros(n), zeros(n), 1:n, w = 10) + Plots._update_plot_object(pgfx_plot) + if @test_nowarn( + haskey(Plots.pgfx_axes(pgfx_plot.o)[1].options.dict, "colorbar") == true + ) + @test Plots.pgfx_axes(pgfx_plot.o)[1]["colorbar"] === nothing + end + end # testset + @testset "Color docs example" begin + y = rand(100) + plot( + 0:10:100, + rand(11, 4), + lab = "lines", + w = 3, + palette = :grays, + fill = 0, + α = 0.6, + ) + pl = scatter!( + y, + zcolor = abs.(y .- 0.5), + m = (:heat, 0.8, Plots.stroke(1, :green)), + ms = 10 * abs.(y .- 0.5) .+ 4, + lab = ["grad", "", "ient"], + ) + Plots._update_plot_object(pl) + axis = Plots.pgfx_axes(pl.o)[1] + @test count(x -> x isa PGFPlotsX.LegendEntry, axis.contents) == 6 + @test count(x -> x isa PGFPlotsX.Plot, axis.contents) == 108 # each marker is its own plot, fillranges create 2 plot-objects + marker = axis.contents[15] + @test marker isa PGFPlotsX.Plot + @test marker.options["mark"] == "*" + @test marker.options["mark options"]["color"] == + RGBA{Float64}(colorant"green", 0.8) + @test marker.options["mark options"]["line width"] == 1 + end # testset + @testset "Plot in pieces" begin + plot(rand(100) / 3, reg = true, fill = (0, :green)) + scatter!(rand(100), markersize = 6, c = :orange) + end # testset + @testset "Marker types" begin + markers = filter((m -> begin + m in Plots.supported_markers() + end), Plots._shape_keys) + markers = reshape(markers, 1, length(markers)) + n = length(markers) + x = (range(0, stop = 10, length = n + 2))[2:(end - 1)] + y = repeat(reshape(reverse(x), 1, :), n, 1) + scatter( + x, + y, + m = (8, :auto), + lab = map(string, markers), + bg = :linen, + xlim = (0, 10), + ylim = (0, 10), + ) + end # testset + @testset "Layout" begin + plot( + Plots.fakedata(100, 10), + layout = 4, + palette = [:grays :blues :heat :lightrainbow], + bg_inside = [:orange :pink :darkblue :black], + ) + end # testset + @testset "Polar plots" begin + Θ = range(0, stop = 1.5π, length = 100) + r = abs.(0.1 * randn(100) + sin.(3Θ)) + plot(Θ, r, proj = :polar, m = 2) + end # testset + @testset "Drawing shapes" begin + verts = [ + (-1.0, 1.0), + (-1.28, 0.6), + (-0.2, -1.4), + (0.2, -1.4), + (1.28, 0.6), + (1.0, 1.0), + (-1.0, 1.0), + (-0.2, -0.6), + (0.0, -0.2), + (-0.4, 0.6), + (1.28, 0.6), + (0.2, -1.4), + (-0.2, -1.4), + (0.6, 0.2), + (-0.2, 0.2), + (0.0, -0.2), + (0.2, 0.2), + (-0.2, -0.6), + ] + x = 0.1:0.2:0.9 + y = 0.7 * rand(5) .+ 0.15 + plot( + x, + y, + line = (3, :dash, :lightblue), + marker = (Shape(verts), 30, RGBA(0, 0, 0, 0.2)), + bg = :pink, + fg = :darkblue, + xlim = (0, 1), + ylim = (0, 1), + leg = false, + ) + end # testset + @testset "Histogram 2D" begin + histogram2d(randn(10000), randn(10000), nbins = 20) + end # testset + @testset "Heatmap-like" begin + xs = [string("x", i) for i = 1:10] + ys = [string("y", i) for i = 1:4] + z = float((1:4) * reshape(1:10, 1, :)) + pgfx_plot = heatmap(xs, ys, z, aspect_ratio = 1) + Plots._update_plot_object(pgfx_plot) + if @test_nowarn( + haskey(Plots.pgfx_axes(pgfx_plot.o)[1].options.dict, "colorbar") == true + ) + @test Plots.pgfx_axes(pgfx_plot.o)[1]["colorbar"] === nothing + @test Plots.pgfx_axes(pgfx_plot.o)[1]["colormap name"] == "plots1" + end - pgfx_plot = wireframe(xs, ys, z, aspect_ratio=1) - # TODO: clims are wrong - end # testset - @testset "Contours" begin - x = 1:0.5:20 - y = 1:0.5:10 - f(x, y) = begin - (3x + y ^ 2) * abs(sin(x) + cos(y)) - end - X = repeat(reshape(x, 1, :), length(y), 1) - Y = repeat(y, 1, length(x)) - Z = map(f, X, Y) - p2 = contour(x, y, Z) - p1 = contour(x, y, f, fill=true) - plot(p1, p2) - # TODO: colorbar for filled contours - end # testset - @testset "Varying colors" begin - t = range(0, stop=1, length=100) - θ = (6π) .* t - x = t .* cos.(θ) - y = t .* sin.(θ) - p1 = plot(x, y, line_z=t, linewidth=3, legend=false) - p2 = scatter(x, y, marker_z=((x, y)->begin - x + y - end), color=:bluesreds, legend=false) - plot(p1, p2) - end # testset - @testset "Framestyles" begin - scatter(fill(randn(10), 6), fill(randn(10), 6), framestyle=[:box :semi :origin :zerolines :grid :none], title=[":box" ":semi" ":origin" ":zerolines" ":grid" ":none"], color=permutedims(1:6), layout=6, label="", markerstrokewidth=0, ticks=-2:2) - # TODO: support :semi - end # testset - @testset "Quiver" begin - x = -2pi:0.2:2*pi - y = sin.(x) + pgfx_plot = wireframe(xs, ys, z, aspect_ratio = 1) + # TODO: clims are wrong + end # testset + @testset "Contours" begin + x = 1:0.5:20 + y = 1:0.5:10 + f(x, y) = begin + (3x + y^2) * abs(sin(x) + cos(y)) + end + X = repeat(reshape(x, 1, :), length(y), 1) + Y = repeat(y, 1, length(x)) + Z = map(f, X, Y) + p2 = contour(x, y, Z) + p1 = contour(x, y, f, fill = true) + plot(p1, p2) + # TODO: colorbar for filled contours + end # testset + @testset "Varying colors" begin + t = range(0, stop = 1, length = 100) + θ = (6π) .* t + x = t .* cos.(θ) + y = t .* sin.(θ) + p1 = plot(x, y, line_z = t, linewidth = 3, legend = false) + p2 = scatter( + x, + y, + marker_z = ((x, y) -> begin + x + y + end), + color = :bluesreds, + legend = false, + ) + plot(p1, p2) + end # testset + @testset "Framestyles" begin + scatter( + fill(randn(10), 6), + fill(randn(10), 6), + framestyle = [:box :semi :origin :zerolines :grid :none], + title = [":box" ":semi" ":origin" ":zerolines" ":grid" ":none"], + color = permutedims(1:6), + layout = 6, + label = "", + markerstrokewidth = 0, + ticks = -2:2, + ) + # TODO: support :semi + end # testset + @testset "Quiver" begin + x = (-2pi):0.2:(2 * pi) + y = sin.(x) - u = ones(length(x)) - v = cos.(x) - arrow_plot = plot( x, y, quiver = (u, v), arrow = true ) - # TODO: could adjust limits to fit arrows if too long, but how? - # TODO: get latex available on CI - # mktempdir() do path - # @test_nowarn savefig(arrow_plot, path*"arrow.pdf") - # end - end # testset - @testset "Annotations" begin - y = rand(10) - plot(y, annotations=(3, y[3], Plots.text("this is \\#3", :left)), leg=false) - annotate!([(5, y[5], Plots.text("this is \\#5", 16, :red, :center)), (10, y[10], Plots.text("this is \\#10", :right, 20, "courier"))]) - annotation_plot = scatter!(range(2, stop=8, length=6), rand(6), marker=(50, 0.2, :orange), series_annotations=["series", "annotations", "map", "to", "series", Plots.text("data", :green)]) - # mktempdir() do path - # @test_nowarn savefig(annotation_plot, path*"annotation.pdf") - # end - end # testset - @testset "Ribbon" begin - aa = rand(10) - bb = rand(10) - cc = rand(10) - conf = [aa-cc bb-cc] - ribbon_plot = plot(collect(1:10),fill(1,10), ribbon=(conf[:,1],conf[:,2])) - Plots._update_plot_object(ribbon_plot) - axis = Plots.pgfx_axes(ribbon_plot.o)[1] - plots = filter(x->x isa PGFPlotsX.Plot, axis.contents) - @test length(plots) == 4 - @test !haskey(plots[1].options.dict, "fill") - @test !haskey(plots[2].options.dict, "fill") - @test !haskey(plots[3].options.dict, "fill") - @test haskey(plots[4].options.dict, "fill") - @test ribbon_plot.o !== nothing - @test ribbon_plot.o.the_plot !== nothing - # mktempdir() do path - # @test_nowarn savefig(ribbon_plot, path*"ribbon.svg") - # end - end # testset - end # testset + u = ones(length(x)) + v = cos.(x) + arrow_plot = plot(x, y, quiver = (u, v), arrow = true) + # TODO: could adjust limits to fit arrows if too long, but how? + # TODO: get latex available on CI + # mktempdir() do path + # @test_nowarn savefig(arrow_plot, path*"arrow.pdf") + # end + end # testset + @testset "Annotations" begin + y = rand(10) + plot( + y, + annotations = (3, y[3], Plots.text("this is \\#3", :left)), + leg = false, + ) + annotate!([ + (5, y[5], Plots.text("this is \\#5", 16, :red, :center)), + (10, y[10], Plots.text("this is \\#10", :right, 20, "courier")), + ]) + annotation_plot = scatter!( + range(2, stop = 8, length = 6), + rand(6), + marker = (50, 0.2, :orange), + series_annotations = [ + "series", + "annotations", + "map", + "to", + "series", + Plots.text("data", :green), + ], + ) + # mktempdir() do path + # @test_nowarn savefig(annotation_plot, path*"annotation.pdf") + # end + end # testset + @testset "Ribbon" begin + aa = rand(10) + bb = rand(10) + cc = rand(10) + conf = [aa - cc bb - cc] + ribbon_plot = + plot(collect(1:10), fill(1, 10), ribbon = (conf[:, 1], conf[:, 2])) + Plots._update_plot_object(ribbon_plot) + axis = Plots.pgfx_axes(ribbon_plot.o)[1] + plots = filter(x -> x isa PGFPlotsX.Plot, axis.contents) + @test length(plots) == 4 + @test !haskey(plots[1].options.dict, "fill") + @test !haskey(plots[2].options.dict, "fill") + @test !haskey(plots[3].options.dict, "fill") + @test haskey(plots[4].options.dict, "fill") + @test ribbon_plot.o !== nothing + @test ribbon_plot.o.the_plot !== nothing + # mktempdir() do path + # @test_nowarn savefig(ribbon_plot, path*"ribbon.svg") + # end + end # testset +end # testset From 6821148e8ee1d399defa173a1de126dc63d4093f Mon Sep 17 00:00:00 2001 From: Michael Krabbe Borregaard Date: Sun, 15 Mar 2020 09:30:07 +0100 Subject: [PATCH 04/77] cap fixedpointnumbers to 0.7 --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 0d5241d4..0bd09e7b 100644 --- a/Project.toml +++ b/Project.toml @@ -33,7 +33,7 @@ UUIDs = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" [compat] Contour = "0.5" FFMPEG = "0.2, 0.3" -FixedPointNumbers = "0.6, 0.7, 0.8" +FixedPointNumbers = "0.6, 0.7" GR = "0.46, 0.47, 0.48" GeometryTypes = "0.7, 0.8" JSON = "0.21" From 79614ffcec3854dafe76b8bd2653f84369b17276 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Mon, 16 Mar 2020 09:17:15 +0100 Subject: [PATCH 05/77] fix StaticArray plotting --- .gitignore | 1 + src/series.jl | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 1bac5f19..0c89a967 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ deps/plotly-latest.min.js deps/build.log deps/deps.jl Manifest.toml +dev/ diff --git a/src/series.jl b/src/series.jl index bba2f313..61676b84 100644 --- a/src/series.jl +++ b/src/series.jl @@ -15,7 +15,7 @@ prepareSeriesData(x) = error("Cannot convert $(typeof(x)) to series data for plo prepareSeriesData(::Nothing) = nothing prepareSeriesData(t::Tuple{T, T}) where {T<:Number} = t prepareSeriesData(f::Function) = f -prepareSeriesData(a::AbstractArray{<:MaybeNumber}) = replace!( +prepareSeriesData(a::AbstractArray{<:MaybeNumber}) = replace( x -> ismissing(x) || isinf(x) ? NaN : x, map(float,a)) prepareSeriesData(a::AbstractArray{<:MaybeString}) = replace(x -> ismissing(x) ? "" : x, a) From 871c7d86c7d391eb3944614e67df8dcc0308407c Mon Sep 17 00:00:00 2001 From: Simon Christ Date: Mon, 16 Mar 2020 14:28:42 +0100 Subject: [PATCH 06/77] add ticks color (#2472) * add ticks color * hotfix --- src/backends/pgfplotsx.jl | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/backends/pgfplotsx.jl b/src/backends/pgfplotsx.jl index 35ea6ba1..4d31970e 100644 --- a/src/backends/pgfplotsx.jl +++ b/src/backends/pgfplotsx.jl @@ -872,6 +872,13 @@ function pgfx_axis!(opt::PGFPlotsX.Options, sp::Subplot, letter) "scaled $(letter) ticks" => "false", string(letter, :label) => axis[:guide], ) + tick_color = plot_color(axis[:foreground_color_axis]) + push!(opt, + "$(letter) tick style" => PGFPlotsX.Options( + "color" => color(tick_color), + "opacity" => alpha(tick_color), + ), + ) # set to supported framestyle framestyle = pgfx_framestyle(sp[:framestyle] == false ? :none : sp[:framestyle]) From 7b68e7985fdfff9924ebb35c3d14124a62ad3c45 Mon Sep 17 00:00:00 2001 From: Simon Christ Date: Mon, 16 Mar 2020 14:27:47 +0100 Subject: [PATCH 07/77] another legends fix --- src/backends/pgfplotsx.jl | 24 ++++++++++++------------ test/test_pgfplotsx.jl | 27 +++++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/src/backends/pgfplotsx.jl b/src/backends/pgfplotsx.jl index 4d31970e..082b9368 100644 --- a/src/backends/pgfplotsx.jl +++ b/src/backends/pgfplotsx.jl @@ -346,28 +346,28 @@ function (pgfx_plot::PGFPlotsXPlot)(plt::Plot{PGFPlotsXBackend}) ) end # add to legend? - if sp[:legend] != :none && pgfx_should_add_to_legend(series) + if sp[:legend] != :none leg_entry = if opt[:label] isa AVec get(opt[:label], i, "") elseif opt[:label] isa AbstractString if i == 1 - opt[:label] + get(opt, :label, "") else "" end else throw(ArgumentError("Malformed label. label = $(opt[:label])")) end - if leg_entry == "" - push!(segment_plot.options, "forget plot" => nothing) - continue + if leg_entry == "" || !pgfx_should_add_to_legend(series) + push!(axis.contents[end].options, "forget plot" => nothing) + else + leg_opt = PGFPlotsX.Options() + if ribbon !== nothing + pgfx_filllegend!(axis.contents[end - 3].options, opt) + end + legend = PGFPlotsX.LegendEntry(leg_opt, leg_entry, false) + push!(axis, legend) end - leg_opt = PGFPlotsX.Options() - if ribbon !== nothing - pgfx_filllegend!(axis.contents[end - 3].options, opt) - end - legend = PGFPlotsX.LegendEntry(leg_opt, leg_entry, false) - push!(axis, legend) end end # for segments # add subplot annotations @@ -691,7 +691,7 @@ function pgfx_font(fontsize, thickness_scaling = 1, font = "\\selectfont") end function pgfx_should_add_to_legend(series::Series) - series.plotattributes[:primary] && series.plotattributes[:label] != "" && + series.plotattributes[:primary] && !( series.plotattributes[:seriestype] in ( :hexbin, diff --git a/test/test_pgfplotsx.jl b/test/test_pgfplotsx.jl index 0e81237e..c88ea2d7 100644 --- a/test/test_pgfplotsx.jl +++ b/test/test_pgfplotsx.jl @@ -20,6 +20,19 @@ end @test count(x -> x isa PGFPlotsX.Plot, axis.contents) == 1 @test !haskey(axis.contents[1].options.dict, "fill") + @testset "Legends" begin + legends_plot = plot( rand(5,2), lab = ["1" ""] ) + scatter!(legends_plot, rand(5) ) + Plots._update_plot_object(legends_plot) + axis_contents = Plots.pgfx_axes(legends_plot.o)[1].contents + leg_entries = filter( x -> x isa PGFPlotsX.LegendEntry, axis_contents ) + series = filter( x -> x isa PGFPlotsX.Plot, axis_contents ) + @test length(leg_entries) == 2 + @test !haskey(series[1].options.dict, "forget plot") + @test haskey(series[2].options.dict, "forget plot") + @test !haskey(series[3].options.dict, "forget plot") + end # testset + @testset "3D docs example" begin n = 100 ts = range(0, stop = 8π, length = n) @@ -74,8 +87,18 @@ end @test marker.options["mark options"]["line width"] == 1 end # testset @testset "Plot in pieces" begin - plot(rand(100) / 3, reg = true, fill = (0, :green)) - scatter!(rand(100), markersize = 6, c = :orange) + pic = plot(rand(100) / 3, reg = true, fill = (0, :green)) + scatter!(pic, rand(100), markersize = 6, c = :orange) + Plots._update_plot_object(pic) + axis_contents = Plots.pgfx_axes(pic.o)[1].contents + leg_entries = filter( x -> x isa PGFPlotsX.LegendEntry, axis_contents ) + series = filter( x -> x isa PGFPlotsX.Plot, axis_contents ) + @test length(leg_entries) == 2 + @test length(series) == 4 + @test haskey(series[1].options.dict, "forget plot") + @test !haskey(series[2].options.dict, "forget plot") + @test haskey(series[3].options.dict, "forget plot") + @test !haskey(series[4].options.dict, "forget plot") end # testset @testset "Marker types" begin markers = filter((m -> begin From 5005120f5efd4da9d28fe8254ba0e16c993f113d Mon Sep 17 00:00:00 2001 From: Simon Christ Date: Mon, 16 Mar 2020 14:43:27 +0100 Subject: [PATCH 08/77] change scaling factor --- src/backends/pgfplotsx.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backends/pgfplotsx.jl b/src/backends/pgfplotsx.jl index 4d31970e..29fd4e76 100644 --- a/src/backends/pgfplotsx.jl +++ b/src/backends/pgfplotsx.jl @@ -259,7 +259,7 @@ function (pgfx_plot::PGFPlotsXPlot)(plt::Plot{PGFPlotsXBackend}) if marker isa Shape x = marker.x y = marker.y - scale_factor = 0.025 + scale_factor = 0.00125 mark_size = opt[:markersize] * scale_factor path = join( [ From 35c68c88904602645db52be62fead5c2e08bc12f Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Mon, 16 Mar 2020 16:33:25 +0100 Subject: [PATCH 09/77] only copy for immutables --- src/series.jl | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/series.jl b/src/series.jl index 61676b84..3776a74d 100644 --- a/src/series.jl +++ b/src/series.jl @@ -15,9 +15,10 @@ prepareSeriesData(x) = error("Cannot convert $(typeof(x)) to series data for plo prepareSeriesData(::Nothing) = nothing prepareSeriesData(t::Tuple{T, T}) where {T<:Number} = t prepareSeriesData(f::Function) = f -prepareSeriesData(a::AbstractArray{<:MaybeNumber}) = replace( - x -> ismissing(x) || isinf(x) ? NaN : x, - map(float,a)) +function prepareSeriesData(a::AbstractArray{<:MaybeNumber}) + f = isimmutable(a) ? replace : replace! + a = f(x -> ismissing(x) || isinf(x) ? NaN : x, map(float, a)) +end prepareSeriesData(a::AbstractArray{<:MaybeString}) = replace(x -> ismissing(x) ? "" : x, a) prepareSeriesData(s::Surface{<:AMat{<:MaybeNumber}}) = Surface(prepareSeriesData(s.surf)) prepareSeriesData(s::Surface) = s # non-numeric Surface, such as an image From 4b5ec3ad07ec1b5923b3e808a452ff49c3df2f85 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Mon, 16 Mar 2020 22:20:42 +0100 Subject: [PATCH 10/77] add prepareSeriesData method for AbstractRanges --- src/series.jl | 1 + 1 file changed, 1 insertion(+) diff --git a/src/series.jl b/src/series.jl index 3776a74d..211472c0 100644 --- a/src/series.jl +++ b/src/series.jl @@ -15,6 +15,7 @@ prepareSeriesData(x) = error("Cannot convert $(typeof(x)) to series data for plo prepareSeriesData(::Nothing) = nothing prepareSeriesData(t::Tuple{T, T}) where {T<:Number} = t prepareSeriesData(f::Function) = f +prepareSeriesData(ar::AbstractRange{<:Number}) = ar function prepareSeriesData(a::AbstractArray{<:MaybeNumber}) f = isimmutable(a) ? replace : replace! a = f(x -> ismissing(x) || isinf(x) ? NaN : x, map(float, a)) From a800f8d4d9ccfd50633f5533ca545e53df54f262 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Mon, 16 Mar 2020 22:53:33 +0100 Subject: [PATCH 11/77] add test example --- Project.toml | 4 +++- src/examples.jl | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 0bd09e7b..0c554df8 100644 --- a/Project.toml +++ b/Project.toml @@ -57,13 +57,15 @@ ImageMagick = "6218d12a-5da1-5696-b52f-db25d2ecc6d1" Images = "916415d5-f1e6-5110-898d-aaa5f9f070e0" LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" LibGit2 = "76f85450-5226-5b5a-8eaa-529ad045b433" +OffsetArrays = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" PGFPlotsX = "8314cec4-20b6-5062-9cdb-752b83310925" RDatasets = "ce6b1742-4840-55fa-b093-852dadbb1d8b" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" +StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" StatsPlots = "f3b207a7-027a-5e70-b257-86293d7955fd" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" UnicodePlots = "b8865327-cd53-5732-bb35-84acbb429228" VisualRegressionTests = "34922c18-7c2a-561c-bac1-01e79b2c4c92" [targets] -test = ["FileIO", "GeometryTypes", "Gtk", "ImageMagick", "Images", "LaTeXStrings", "LibGit2", "PGFPlotsX", "Random", "RDatasets", "StatsPlots", "Test", "UnicodePlots", "VisualRegressionTests"] +test = ["FileIO", "GeometryTypes", "Gtk", "ImageMagick", "Images", "LaTeXStrings", "LibGit2", "OffsetArrays", "PGFPlotsX", "Random", "RDatasets", "StaticArrays", "StatsPlots", "Test", "UnicodePlots", "VisualRegressionTests"] diff --git a/src/examples.jl b/src/examples.jl index 950cd970..8864c648 100644 --- a/src/examples.jl +++ b/src/examples.jl @@ -875,6 +875,20 @@ const _examples = PlotExample[ end, ], ), + PlotExample( + "Array Types", + "Plots supports different `Array` types that follow the `AbstractArray` interface, like `StaticArrays` and `OffsetArrays.`", + [ + quote + begin + using StaticArrays, OffsetArrays + sv = SVector{10}(rand(10)) + ov = OffsetVector(rand(10), -2) + plot([sv, ov], label = ["StaticArray" "OffsetArray"]) + end + end, + ], + ), ] # Some constants for PlotDocs and PlotReferenceImages From 8d8921fd08dce1b8302700d81f7d5ae12710dbaf Mon Sep 17 00:00:00 2001 From: Simon Christ Date: Tue, 17 Mar 2020 11:25:38 +0100 Subject: [PATCH 12/77] bump version --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 0bd09e7b..bfb87a38 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "Plots" uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" author = ["Tom Breloff (@tbreloff)"] -version = "0.29.7" +version = "0.29.8" [deps] Base64 = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" From c1dae9e9d933ced69c243deaea497207b8db46f5 Mon Sep 17 00:00:00 2001 From: Simon Christ Date: Tue, 17 Mar 2020 15:26:35 +0100 Subject: [PATCH 13/77] sanitize strings --- src/backends/pgfplotsx.jl | 43 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/backends/pgfplotsx.jl b/src/backends/pgfplotsx.jl index 29fd4e76..e2bf3a65 100644 --- a/src/backends/pgfplotsx.jl +++ b/src/backends/pgfplotsx.jl @@ -76,6 +76,7 @@ end function (pgfx_plot::PGFPlotsXPlot)(plt::Plot{PGFPlotsXBackend}) if !pgfx_plot.is_created || pgfx_plot.was_shown + pgfx_sanitize_plot!(plt) the_plot = PGFPlotsX.TikzPicture(PGFPlotsX.Options()) bgc = plt.attr[:background_color_outside] == :match ? plt.attr[:background_color] : plt.attr[:background_color_outside] @@ -862,6 +863,48 @@ function pgfx_fillrange_args(fillrange, x, y, z) z_fill = [z; _cycle(fillrange, n:-1:1); z[1]] return PGFPlotsX.Coordiantes(x_fill, y_fill, z_fill) end + +function pgfx_sanitize_string(p::PlotText) + PlotText(pgfx_sanitize_string(p.str), p.font) +end +function pgfx_sanitize_string(s::AbstractString) + s = replace(s, r"\\?\#" => "\\#") + s = replace(s, r"\\?\%" => "\\%") + s = replace(s, r"\\?\_" => "\\_") + s = replace(s, r"\\?\&" => "\\&") +end +function pgfx_sanitize_plot!(plt) + for (key, value) in plt.attr + if value isa Union{AbstractString, AbstractVector{<:AbstractString}} + plt.attr[key] = pgfx_sanitize_string.(value) + end + end + for subplot in plt.subplots + for (key, value) in subplot.attr + if key == :annotations && subplot.attr[:annotations] !== nothing + old_ann = subplot.attr[key] + for i in eachindex(old_ann) + subplot.attr[key][i] = (old_ann[i][1], old_ann[i][2], pgfx_sanitize_string(old_ann[i][3])) + end + elseif value isa Union{AbstractString, AbstractVector{<:AbstractString}} + subplot.attr[key] = pgfx_sanitize_string.(value) + end + end + end + for series in plt.series_list + for (key, value) in series.plotattributes + if key == :series_annotations && series.plotattributes[:series_annotations] !== nothing + old_ann = series.plotattributes[key].strs + for i in eachindex(old_ann) + series.plotattributes[key].strs[i] = pgfx_sanitize_string(old_ann[i]) + end + elseif value isa Union{AbstractString, AbstractVector{<:AbstractString}} + series.plotattributes[key] = pgfx_sanitize_string.(value) + end + end + end + ## +end # -------------------------------------------------------------------------------------- function pgfx_axis!(opt::PGFPlotsX.Options, sp::Subplot, letter) axis = sp[Symbol(letter, :axis)] From 16b568840d72046af8db46fef5e3c44b57a192e9 Mon Sep 17 00:00:00 2001 From: Simon Christ Date: Tue, 17 Mar 2020 15:32:54 +0100 Subject: [PATCH 14/77] pin FixedPointNumbers --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 7288bdf7..b8ae53eb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,4 +35,4 @@ notifications: script: - if [[ -a .git/shallow ]]; then git fetch --unshallow; fi - if [[ `uname` = "Linux" ]]; then TESTCMD="xvfb-run julia"; else TESTCMD="julia"; fi - - $TESTCMD -e 'using Pkg; Pkg.build(); Pkg.test(coverage=true)' + - $TESTCMD -e 'using Pkg; Pkg.pin(PackageSpec(name="FixedPointNumbers", version="0.7")); Pkg.build(); Pkg.test(coverage=true)' From 00379097cfce89290ada72e33496f68a4a396dea Mon Sep 17 00:00:00 2001 From: Simon Christ Date: Tue, 17 Mar 2020 15:34:03 +0100 Subject: [PATCH 15/77] change compat --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index bfb87a38..16ee61f2 100644 --- a/Project.toml +++ b/Project.toml @@ -33,7 +33,7 @@ UUIDs = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" [compat] Contour = "0.5" FFMPEG = "0.2, 0.3" -FixedPointNumbers = "0.6, 0.7" +FixedPointNumbers = "0.6, 0.7, 0.8" GR = "0.46, 0.47, 0.48" GeometryTypes = "0.7, 0.8" JSON = "0.21" From eb942352ce39e9f0684e08187ce78c7cd3f6ea7d Mon Sep 17 00:00:00 2001 From: Simon Christ Date: Tue, 17 Mar 2020 16:46:08 +0100 Subject: [PATCH 16/77] add pin to appveyor --- appveyor.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/appveyor.yml b/appveyor.yml index 02074c59..cfc27473 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -35,6 +35,7 @@ install: build_script: - echo "%JL_BUILD_SCRIPT%" - C:\julia\bin\julia -e "%JL_BUILD_SCRIPT%" + - C:\julia\bin\julia -e "using Pkg; Pkg.pin(PackageSpec(name="FixedPointNumbers", version="0.7"))" test_script: - echo "%JL_TEST_SCRIPT%" From 0d210843e7d853951a0abb57517af091bd7ac26e Mon Sep 17 00:00:00 2001 From: Simon Christ Date: Tue, 17 Mar 2020 21:30:48 +0100 Subject: [PATCH 17/77] add example 20 --- src/examples.jl | 1 - 1 file changed, 1 deletion(-) diff --git a/src/examples.jl b/src/examples.jl index 950cd970..9f65b913 100644 --- a/src/examples.jl +++ b/src/examples.jl @@ -887,7 +887,6 @@ _backend_skips = Dict( :pgfplots => [2, 5, 6, 10, 16, 20, 22, 23, 25, 28, 30, 31, 34, 37, 38, 39], :pgfplotsx => [ 6, # images 10, # histogram2d - 20, # annotations due to missing sanitation 22, # contourf 23, # pie 32, # spy From 3ed50bbf0fbc028026cbe3d4a8ff191f4ec07906 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Wed, 18 Mar 2020 00:22:55 +0100 Subject: [PATCH 18/77] make type recipes work for vectors --- src/series.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/series.jl b/src/series.jl index bba2f313..4f66da77 100644 --- a/src/series.jl +++ b/src/series.jl @@ -181,11 +181,11 @@ function _apply_type_recipe(plotattributes, v::AbstractArray) isempty(skipmissing(v)) && return Float64[] x = first(skipmissing(v)) args = RecipesBase.apply_recipe(plotattributes, typeof(x), x)[1].args - if length(args) == 2 && typeof(args[1]) <: Function && typeof(args[2]) <: Function + if length(args) == 2 && all(arg -> arg isa Function, args) numfunc, formatter = args Formatted(map(numfunc, v), formatter) else - v + RecipesBase.apply_recipe(plotattributes, typeof(v), v)[1].args[1] end end From 89e271bd912187e5193e670b28129bd124fa04e5 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Wed, 18 Mar 2020 01:23:46 +0100 Subject: [PATCH 19/77] reverse type recipe order --- src/series.jl | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/series.jl b/src/series.jl index 4f66da77..edc1053b 100644 --- a/src/series.jl +++ b/src/series.jl @@ -178,15 +178,19 @@ _apply_type_recipe(plotattributes, v) = RecipesBase.apply_recipe(plotattributes, # This sort of recipe should return a pair of functions... one to convert to number, # and one to format tick values. function _apply_type_recipe(plotattributes, v::AbstractArray) - isempty(skipmissing(v)) && return Float64[] - x = first(skipmissing(v)) - args = RecipesBase.apply_recipe(plotattributes, typeof(x), x)[1].args - if length(args) == 2 && all(arg -> arg isa Function, args) - numfunc, formatter = args - Formatted(map(numfunc, v), formatter) - else - RecipesBase.apply_recipe(plotattributes, typeof(v), v)[1].args[1] + # First we try to apply an array type recipe. + w = RecipesBase.apply_recipe(plotattributes, typeof(v), v)[1].args[1] + # If the type did not change try it element-wise + if v == w + isempty(skipmissing(v)) && return Float64[] + x = first(skipmissing(v)) + args = RecipesBase.apply_recipe(plotattributes, typeof(x), x)[1].args + if length(args) == 2 && all(arg -> arg isa Function, args) + numfunc, formatter = args + return Formatted(map(numfunc, v), formatter) + end end + return w end # # special handling for Surface... need to properly unwrap and re-wrap From b60007cde9d9404355deb91d6f55eb47ba47b2a2 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Wed, 18 Mar 2020 01:28:29 +0100 Subject: [PATCH 20/77] update comment --- src/series.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/series.jl b/src/series.jl index edc1053b..787c7200 100644 --- a/src/series.jl +++ b/src/series.jl @@ -180,7 +180,7 @@ _apply_type_recipe(plotattributes, v) = RecipesBase.apply_recipe(plotattributes, function _apply_type_recipe(plotattributes, v::AbstractArray) # First we try to apply an array type recipe. w = RecipesBase.apply_recipe(plotattributes, typeof(v), v)[1].args[1] - # If the type did not change try it element-wise + # If it did not change try it element-wise if v == w isempty(skipmissing(v)) && return Float64[] x = first(skipmissing(v)) From f606f083a4ad45a51f5bd3f3c58964837c56085f Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Wed, 18 Mar 2020 01:43:42 +0100 Subject: [PATCH 21/77] fix for vectors containing missing --- src/series.jl | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/series.jl b/src/series.jl index 787c7200..44fd7b95 100644 --- a/src/series.jl +++ b/src/series.jl @@ -180,14 +180,16 @@ _apply_type_recipe(plotattributes, v) = RecipesBase.apply_recipe(plotattributes, function _apply_type_recipe(plotattributes, v::AbstractArray) # First we try to apply an array type recipe. w = RecipesBase.apply_recipe(plotattributes, typeof(v), v)[1].args[1] - # If it did not change try it element-wise - if v == w + # If the type did not change try it element-wise + if typeof(v) == typeof(w) isempty(skipmissing(v)) && return Float64[] x = first(skipmissing(v)) args = RecipesBase.apply_recipe(plotattributes, typeof(x), x)[1].args if length(args) == 2 && all(arg -> arg isa Function, args) numfunc, formatter = args return Formatted(map(numfunc, v), formatter) + else + return v end end return w From cbaa8fca56d33f4746d5f4d06451f1c313966af2 Mon Sep 17 00:00:00 2001 From: harryscholes Date: Wed, 18 Mar 2020 09:53:09 +0000 Subject: [PATCH 22/77] Fix annotate docstring --- src/shorthands.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/shorthands.jl b/src/shorthands.jl index 776626a9..57bfe176 100644 --- a/src/shorthands.jl +++ b/src/shorthands.jl @@ -428,8 +428,8 @@ Add annotations to an existing plot. # Arguments -- `anns`: An `AbstractVector` of tuples of the form (x,y,text). The text object - can be an String or PlotText +- `anns`: An `AbstractVector` of tuples of the form `(x,y,text)`. The `text` object + can be a `String` or `PlotText`. # Example ```julia-repl From 62290a2a248fdae0cb53124fa7cf7781a14cb764 Mon Sep 17 00:00:00 2001 From: Simon Christ Date: Wed, 18 Mar 2020 13:49:06 +0100 Subject: [PATCH 23/77] Fix appveyor.yml (#2484) * Update appveyor.yml * change parantheses * escape inner quotation marks * another try * Update appveyor.yml --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index cfc27473..890f4960 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -33,10 +33,10 @@ install: - ps: iex ((new-object net.webclient).DownloadString("https://raw.githubusercontent.com/JuliaCI/Appveyor.jl/version-1/bin/install.ps1")) build_script: + - C:\julia\bin\julia --project=C:\projects\plots-jl -e "using Pkg; Pkg.pin(PackageSpec(name="""FixedPointNumbers""", version="""0.7"""))" - echo "%JL_BUILD_SCRIPT%" - C:\julia\bin\julia -e "%JL_BUILD_SCRIPT%" - - C:\julia\bin\julia -e "using Pkg; Pkg.pin(PackageSpec(name="FixedPointNumbers", version="0.7"))" - + test_script: - echo "%JL_TEST_SCRIPT%" - C:\julia\bin\julia -e "%JL_TEST_SCRIPT%" From 96181b8c48210dfe21cf3f2266695a757a7a42ae Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Wed, 18 Mar 2020 16:27:08 +0100 Subject: [PATCH 24/77] only apply axis attributes in type recipes to current axis --- src/series.jl | 56 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 46 insertions(+), 10 deletions(-) diff --git a/src/series.jl b/src/series.jl index 44fd7b95..7e51043f 100644 --- a/src/series.jl +++ b/src/series.jl @@ -172,12 +172,18 @@ end # this should catch unhandled "series recipes" and error with a nice message @recipe f(::Type{V}, x, y, z) where {V<:Val} = error("The backend must not support the series type $V, and there isn't a series recipe defined.") -_apply_type_recipe(plotattributes, v) = RecipesBase.apply_recipe(plotattributes, typeof(v), v)[1].args[1] +function _apply_type_recipe(plotattributes, v, letter) + _handle_axis_args!(plotattributes) + rdvec = RecipesBase.apply_recipe(plotattributes, typeof(v), v) + _handle_axis_args!(plotattributes, letter) + return rdvec[1].args[1] +end # Handle type recipes when the recipe is defined on the elements. # This sort of recipe should return a pair of functions... one to convert to number, # and one to format tick values. -function _apply_type_recipe(plotattributes, v::AbstractArray) +function _apply_type_recipe(plotattributes, v::AbstractArray, letter) + _handle_axis_args!(plotattributes) # First we try to apply an array type recipe. w = RecipesBase.apply_recipe(plotattributes, typeof(v), v)[1].args[1] # If the type did not change try it element-wise @@ -185,6 +191,7 @@ function _apply_type_recipe(plotattributes, v::AbstractArray) isempty(skipmissing(v)) && return Float64[] x = first(skipmissing(v)) args = RecipesBase.apply_recipe(plotattributes, typeof(x), x)[1].args + _handle_axis_args!(plotattributes, letter) if length(args) == 2 && all(arg -> arg isa Function, args) numfunc, formatter = args return Formatted(map(numfunc, v), formatter) @@ -192,6 +199,7 @@ function _apply_type_recipe(plotattributes, v::AbstractArray) return v end end + _handle_axis_args!(plotattributes, letter) return w end @@ -212,16 +220,44 @@ end # end # don't do anything for ints or floats -_apply_type_recipe(plotattributes, v::AbstractArray{T}) where {T<:Union{Integer,AbstractFloat}} = v +_apply_type_recipe(plotattributes, v::AbstractArray{T}, letter) where {T<:Union{Integer,AbstractFloat}} = v + +# axis args in type recipes should only be applied to the current axis +function _handle_axis_args!(plotattributes, letter) + if letter in (:x, :y, :z) + replaceAliases!(plotattributes, _keyAliases) + for (k, v) in plotattributes + if haskey(_axis_defaults, k) + pop!(plotattributes, k) + lk = Symbol(letter, k) + haskey(plotattributes, lk) || (plotattributes[lk] = v) + end + end + end +end + +# axis args before type recipes should still be mapped to all axes +function _handle_axis_args!(plotattributes) + replaceAliases!(plotattributes, _keyAliases) + for (k, v) in plotattributes + if haskey(_axis_defaults, k) + pop!(plotattributes, k) + for letter in (:x, :y, :z) + lk = Symbol(letter, k) + haskey(plotattributes, lk) || (plotattributes[lk] = v) + end + end + end +end # handle "type recipes" by converting inputs, and then either re-calling or slicing @recipe function f(x, y, z) did_replace = false - newx = _apply_type_recipe(plotattributes, x) + newx = _apply_type_recipe(plotattributes, x, :x) x === newx || (did_replace = true) - newy = _apply_type_recipe(plotattributes, y) + newy = _apply_type_recipe(plotattributes, y, :y) y === newy || (did_replace = true) - newz = _apply_type_recipe(plotattributes, z) + newz = _apply_type_recipe(plotattributes, z, :z) z === newz || (did_replace = true) if did_replace newx, newy, newz @@ -231,9 +267,9 @@ _apply_type_recipe(plotattributes, v::AbstractArray{T}) where {T<:Union{Integer, end @recipe function f(x, y) did_replace = false - newx = _apply_type_recipe(plotattributes, x) + newx = _apply_type_recipe(plotattributes, x, :x) x === newx || (did_replace = true) - newy = _apply_type_recipe(plotattributes, y) + newy = _apply_type_recipe(plotattributes, y, :y) y === newy || (did_replace = true) if did_replace newx, newy @@ -242,7 +278,7 @@ end end end @recipe function f(y) - newy = _apply_type_recipe(plotattributes, y) + newy = _apply_type_recipe(plotattributes, y, :y) if y !== newy newy else @@ -255,7 +291,7 @@ end @recipe function f(v1, v2, v3, v4, vrest...) did_replace = false newargs = map(v -> begin - newv = _apply_type_recipe(plotattributes, v) + newv = _apply_type_recipe(plotattributes, v, :unknown) if newv !== v did_replace = true end From fcff639d0c5e6fea4e43ee8a24412470c1832d16 Mon Sep 17 00:00:00 2001 From: Simon Christ Date: Wed, 18 Mar 2020 17:05:07 +0100 Subject: [PATCH 25/77] put gridlines in the back --- src/backends/pgfplotsx.jl | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/backends/pgfplotsx.jl b/src/backends/pgfplotsx.jl index 0171b743..2a4e337d 100644 --- a/src/backends/pgfplotsx.jl +++ b/src/backends/pgfplotsx.jl @@ -29,11 +29,20 @@ Base.@kwdef mutable struct PGFPlotsXPlot PGFPlotsX.push_preamble!( pgfx_plot.the_plot, raw""" - \pgfplotsset{ - /pgfplots/layers/axis on top/.define layer set={ - background, axis background,pre main,main,axis grid,axis ticks,axis lines,axis tick labels, - axis descriptions,axis foreground - }{/pgfplots/layers/standard}, + \pgfplotsset{% + layers/standard/.define layer set={% + background,axis background,axis grid,axis ticks,axis lines,axis tick labels,pre main,main,axis descriptions,axis foreground% + }{grid style= {/pgfplots/on layer=axis grid},% + tick style= {/pgfplots/on layer=axis ticks},% + axis line style= {/pgfplots/on layer=axis lines},% + label style= {/pgfplots/on layer=axis descriptions},% + legend style= {/pgfplots/on layer=axis descriptions},% + title style= {/pgfplots/on layer=axis descriptions},% + colorbar style= {/pgfplots/on layer=axis descriptions},% + ticklabel style= {/pgfplots/on layer=axis tick labels},% + axis background@ style={/pgfplots/on layer=axis background},% + 3d box foreground style={/pgfplots/on layer=axis foreground},% + }, } """, ) @@ -140,8 +149,6 @@ function (pgfx_plot::PGFPlotsXPlot)(plt::Plot{PGFPlotsXBackend}) "fill" => bgc_inside, "opacity" => bgc_inside_a, ), - "axis on top" => nothing, - # "framed" => nothing, # These are for layouting "anchor" => "north west", "xshift" => string(dx), From 23b191231c19342e630592c391e0f85a1ac9b706 Mon Sep 17 00:00:00 2001 From: Simon Christ Date: Thu, 19 Mar 2020 11:57:10 +0100 Subject: [PATCH 26/77] more positions (#2490) * tick label styling * add title_location * add legend positions * fix commata --- src/backends/pgfplotsx.jl | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/src/backends/pgfplotsx.jl b/src/backends/pgfplotsx.jl index 2a4e337d..672636c6 100644 --- a/src/backends/pgfplotsx.jl +++ b/src/backends/pgfplotsx.jl @@ -117,14 +117,24 @@ function (pgfx_plot::PGFPlotsXPlot)(plt::Plot{PGFPlotsXBackend}) fg_alpha = alpha(plot_color(sp[:foreground_color_legend])) title_cstr = plot_color(sp[:titlefontcolor]) title_a = alpha(title_cstr) + title_loc = sp[:title_location] bgc_inside = plot_color(sp[:background_color_inside]) bgc_inside_a = alpha(bgc_inside) axis_opt = PGFPlotsX.Options( "title" => sp[:title], "title style" => PGFPlotsX.Options( - "font" => pgfx_font( - sp[:titlefontsize], - pgfx_thickness_scaling(sp), + "at" => if title_loc == :left + "{(0,1)}" + elseif title_loc == :right + "{(1,1)}" + elseif title_loc isa Tuple + "{$(string(title_loc))}" + else + "{(0.5,1)}" + end, + "font" => pgfx_font( + sp[:titlefontsize], + pgfx_thickness_scaling(sp), ), "color" => title_cstr, "draw opacity" => title_a, @@ -594,11 +604,22 @@ const _pgfplotsx_markers = KW( ) const _pgfplotsx_legend_pos = KW( + :top => "north", + :bottom => "south", + :left => "west", + :right => "east", :bottomleft => "south west", :bottomright => "south east", :topright => "north east", :topleft => "north west", + :outertop => "north", + :outerbottom => "outer south", + :outerleft => "outer west", + :outerright => "outer east", + :outerbottomleft => "outer south west", + :outerbottomright => "outer south east", :outertopright => "outer north east", + :outertopleft => "outer north west", ) const _pgfx_framestyles = [:box, :axes, :origin, :zerolines, :grid, :none] @@ -929,6 +950,14 @@ function pgfx_axis!(opt::PGFPlotsX.Options, sp::Subplot, letter) "opacity" => alpha(tick_color), ), ) + tick_label_color = plot_color(axis[:tickfontcolor]) + push!(opt, + "$(letter) tick label style" => PGFPlotsX.Options( + "color" => color(tick_color), + "opacity" => alpha(tick_color), + "rotate" => axis[:rotation] + ), + ) # set to supported framestyle framestyle = pgfx_framestyle(sp[:framestyle] == false ? :none : sp[:framestyle]) From fa8c1e3967684d72d29759b96bb0628aaf1fa410 Mon Sep 17 00:00:00 2001 From: MA Laforge Date: Thu, 19 Mar 2020 17:18:07 -0400 Subject: [PATCH 27/77] Fix broken hdf5 "backend". Add support for new Attr structure. --- src/backends/hdf5.jl | 102 ++++++++++++++++++++++++++++--------------- 1 file changed, 66 insertions(+), 36 deletions(-) diff --git a/src/backends/hdf5.jl b/src/backends/hdf5.jl index 07995e17..677d994e 100644 --- a/src/backends/hdf5.jl +++ b/src/backends/hdf5.jl @@ -83,6 +83,7 @@ if length(HDF5PLOT_MAP_TELEM2STR) < 1 "ARRAY" => Array, #Dict won't allow Array to be key in HDF5PLOT_MAP_TELEM2STR #Sub-structure types: + "ATTR" => Attr, "FONT" => Font, "BOUNDINGBOX" => BoundingBox, "GRIDLAYOUT" => GridLayout, @@ -109,7 +110,7 @@ _hdf5_datapath(subpath::String) = "$_hdf5_dataroot/$subpath" _hdf5_map_str2telem(k::String) = HDF5PLOT_MAP_STR2TELEM[k] _hdf5_map_str2telem(v::Vector) = HDF5PLOT_MAP_STR2TELEM[v[1]] -function _hdf5_merge!(dest, src) +function _hdf5_merge!(dest::AKW, src::AKW) for (k, v) in src if isa(v, Axis) _hdf5_merge!(dest[k].plotattributes, v.plotattributes) @@ -263,6 +264,15 @@ function _hdf5plot_gwrite(grp, k::String, v::Array{T}) where T<:Number #Default grp[k] = v _hdf5plot_writetype(grp, k, HDF5PlotNative) end +function _hdf5plot_gwrite(grp, k::String, v::Dict) +#= + tstr = string(Dict) + path = HDF5.name(grp) * "/" * k + @info("Type not supported: $tstr\npath: $path") +=# + #No support for structures with Dicts different than KW (plotattributes) +end + #= function _hdf5plot_gwrite(grp, k::String, v::Array{Any}) # @show grp, k @@ -295,7 +305,8 @@ function _hdf5plot_gwrite(grp, k::String, v::Tuple) end #NOTE: _hdf5plot_overwritetype overwrites "Array" type with "Tuple". end -function _hdf5plot_gwrite(grp, k::String, plotattributes::AKW) +function _hdf5plot_gwrite(grp, k::String, plotattributes::KW) + #NOTE: Can only write directly to group, not a subi-item # @warn("Cannot write dict: $k=$plotattributes") end function _hdf5plot_gwrite(grp, k::String, v::AbstractRange) @@ -376,13 +387,22 @@ function _hdf5plot_gwrite(grp, k::String, v::Subplot) _hdf5plot_writetype(grp, Subplot) return end -function _hdf5plot_write(grp, plotattributes::AKW) + +function _hdf5plot_write(grp, plotattributes::KW) for (k, v) in plotattributes kstr = string(k) _hdf5plot_gwrite(grp, kstr, v) end return end +function _hdf5plot_write(grp, plotattributes::Attr) + for (k, v) in plotattributes + kstr = string(k) + _hdf5plot_gwrite(grp, kstr, v) + end + _hdf5plot_writetype(grp, Attr) +end + # Write main plot structures: # ---------------------------------------------------------------- @@ -445,20 +465,14 @@ _hdf5plot_convert(T::Type{Extrema}, v) = Extrema(v[1], v[2]) # Read data structures: # ---------------------------------------------------------------- -function _hdf5plot_read(grp, k::String, T::Type, dtid) +function _hdf5plot_read(grp, k::String, T::Type) v = HDF5.d_read(grp, k) return _hdf5plot_convert(T, v) end -function _hdf5plot_read(grp, k::String, T::Type{Length}, dtid::Vector) - v = HDF5.d_read(grp, k) - TU = Symbol(dtid[2]) - T = typeof(v) - return Length{TU,T}(v) -end # Read more complex data structures: # ---------------------------------------------------------------- -function _hdf5plot_read(grp, k::String, T::Type{Font}, dtid) +function _hdf5plot_read(grp, k::String, T::Type{Font}) grp = HDF5.g_open(grp, k) family = _hdf5plot_read(grp, "family") @@ -469,7 +483,7 @@ function _hdf5plot_read(grp, k::String, T::Type{Font}, dtid) color = _hdf5plot_read(grp, "color") return Font(family, pointsize, halign, valign, rotation, color) end -function _hdf5plot_read(grp, k::String, T::Type{Array}, dtid) #ANY +function _hdf5plot_read(grp, k::String, T::Type{Array}) #ANY grp = HDF5.g_open(grp, k) sz = _hdf5plot_read(grp, "dim") if [0] == sz; return []; end @@ -488,18 +502,18 @@ function _hdf5plot_read(grp, k::String, T::Type{Array}, dtid) #ANY result = [result[iter] for iter in eachindex(result)] #Potentially make more specific return reshape(result, sz) end -function _hdf5plot_read(grp, k::String, T::Type{HDF5CTuple}, dtid) - v = _hdf5plot_read(grp, k, Array, dtid) +function _hdf5plot_read(grp, k::String, T::Type{HDF5CTuple}) + v = _hdf5plot_read(grp, k, Array) return tuple(v...) end -function _hdf5plot_read(grp, k::String, T::Type{PlotText}, dtid) +function _hdf5plot_read(grp, k::String, T::Type{PlotText}) grp = HDF5.g_open(grp, k) str = _hdf5plot_read(grp, "str") font = _hdf5plot_read(grp, "font") return PlotText(str, font) end -function _hdf5plot_read(grp, k::String, T::Type{SeriesAnnotations}, dtid) +function _hdf5plot_read(grp, k::String, T::Type{SeriesAnnotations}) grp = HDF5.g_open(grp, k) strs = _hdf5plot_read(grp, "strs") @@ -508,29 +522,29 @@ function _hdf5plot_read(grp, k::String, T::Type{SeriesAnnotations}, dtid) scalefactor = _hdf5plot_read(grp, "scalefactor") return SeriesAnnotations(strs, font, baseshape, scalefactor) end -function _hdf5plot_read(grp, k::String, T::Type{Shape}, dtid) +function _hdf5plot_read(grp, k::String, T::Type{Shape}) grp = HDF5.g_open(grp, k) x = _hdf5plot_read(grp, "x") y = _hdf5plot_read(grp, "y") return Shape(x, y) end -function _hdf5plot_read(grp, k::String, T::Type{ColorGradient}, dtid) +function _hdf5plot_read(grp, k::String, T::Type{ColorGradient}) grp = HDF5.g_open(grp, k) colors = _hdf5plot_read(grp, "colors") values = _hdf5plot_read(grp, "values") return ColorGradient(colors, values) end -function _hdf5plot_read(grp, k::String, T::Type{BoundingBox}, dtid) +function _hdf5plot_read(grp, k::String, T::Type{BoundingBox}) grp = HDF5.g_open(grp, k) x0 = _hdf5plot_read(grp, "x0") a = _hdf5plot_read(grp, "a") return BoundingBox(x0, a) end -_hdf5plot_read(grp, k::String, T::Type{RootLayout}, dtid) = RootLayout() -function _hdf5plot_read(grp, k::String, T::Type{GridLayout}, dtid) +_hdf5plot_read(grp, k::String, T::Type{RootLayout}) = RootLayout() +function _hdf5plot_read(grp, k::String, T::Type{GridLayout}) grp = HDF5.g_open(grp, k) # parent = _hdf5plot_read(grp, "parent") @@ -544,22 +558,36 @@ parent = RootLayout() return GridLayout(parent, minpad, bbox, grid, widths, heights, attr) end -function _hdf5plot_read(grp, k::String, T::Type{Axis}, dtid) - grp = HDF5.g_open(grp, k) - kwlist = KW() - _hdf5plot_read(grp, kwlist) - return Axis([], kwlist) +function _hdf5plot_read(grp, T::Type{Attr}) + attr = Attr(KW(), _plot_defaults) + v = _hdf5plot_read(grp, attr) + return attr end -function _hdf5plot_read(grp, k::String, T::Type{Surface}, dtid) +function _hdf5plot_read(grp, k::String, T::Type{Axis}) + grp = HDF5.g_open(grp, k) + plotattributes = Attr(KW(), _plot_defaults) + _hdf5plot_read(grp, plotattributes) + return Axis([], plotattributes) +end +function _hdf5plot_read(grp, k::String, T::Type{Surface}) grp = HDF5.g_open(grp, k) data2d = _hdf5plot_read(grp, "data2d") return Surface(data2d) end -function _hdf5plot_read(grp, k::String, T::Type{Subplot}, dtid) +function _hdf5plot_read(grp, k::String, T::Type{Subplot}) grp = HDF5.g_open(grp, k) idx = _hdf5plot_read(grp, "index") return HDF5PLOT_PLOTREF.ref.subplots[idx] end + +#Most types don't need dtid for read!!: +_hdf5plot_read(grp, k::String, T::Type, dtid) = _hdf5plot_read(grp, k, T) +function _hdf5plot_read(grp, k::String, T::Type{Length}, dtid::Vector) + v = HDF5.d_read(grp, k) + TU = Symbol(dtid[2]) + T = typeof(v) + return Length{TU,T}(v) +end function _hdf5plot_read(grp, k::String) dtid = HDF5.a_read(grp[k], _hdf5plot_datatypeid) T = _hdf5_map_str2telem(dtid) #expect exception @@ -567,7 +595,7 @@ function _hdf5plot_read(grp, k::String) end #Read in values in group to populate plotattributes: -function _hdf5plot_read(grp, plotattributes::AKW) +function _hdf5plot_readattr(grp, plotattributes::AbstractDict) gnames = names(grp) for k in gnames try @@ -581,6 +609,8 @@ function _hdf5plot_read(grp, plotattributes::AKW) end return end +_hdf5plot_read(grp, plotattributes::KW) = _hdf5plot_readattr(grp, plotattributes) +_hdf5plot_read(grp, plotattributes::Attr) = _hdf5plot_readattr(grp, plotattributes) # Read main plot structures: # ---------------------------------------------------------------- @@ -593,17 +623,17 @@ function _hdf5plot_read(sp::Subplot, subpath::String, f) for i in 1:nseries grp = HDF5.g_open(f, _hdf5_plotelempath("$subpath/series_list/series$i")) - kwlist = KW() - _hdf5plot_read(grp, kwlist) - plot!(sp, kwlist[:x], kwlist[:y]) #Add data & create data structures - _hdf5_merge!(sp.series_list[end].plotattributes, kwlist) + seriesinfo = Attr(KW(), _plot_defaults) + _hdf5plot_read(grp, seriesinfo) + plot!(sp, seriesinfo[:x], seriesinfo[:y]) #Add data & create data structures + _hdf5_merge!(sp.series_list[end].plotattributes, seriesinfo) end #Perform after adding series... otherwise values get overwritten: grp = HDF5.g_open(f, _hdf5_plotelempath("$subpath/attr")) - kwlist = KW() - _hdf5plot_read(grp, kwlist) - _hdf5_merge!(sp.attr, kwlist) + attr = Attr(KW(), _plot_defaults) + _hdf5plot_read(grp, attr) + _hdf5_merge!(sp.attr, attr) return end From 3fe013cd24092c11ad6abe3e7dd9b13b39bb639c Mon Sep 17 00:00:00 2001 From: MA Laforge Date: Fri, 20 Mar 2020 18:03:00 -0400 Subject: [PATCH 28/77] Add simple testset for HDF5 plots. --- Project.toml | 3 ++- test/runtests.jl | 1 + test/test_hdf5plots.jl | 21 +++++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 test/test_hdf5plots.jl diff --git a/Project.toml b/Project.toml index 251c71f7..f03c1ed2 100644 --- a/Project.toml +++ b/Project.toml @@ -59,6 +59,7 @@ LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" LibGit2 = "76f85450-5226-5b5a-8eaa-529ad045b433" OffsetArrays = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" PGFPlotsX = "8314cec4-20b6-5062-9cdb-752b83310925" +HDF5 = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" RDatasets = "ce6b1742-4840-55fa-b093-852dadbb1d8b" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" @@ -68,4 +69,4 @@ UnicodePlots = "b8865327-cd53-5732-bb35-84acbb429228" VisualRegressionTests = "34922c18-7c2a-561c-bac1-01e79b2c4c92" [targets] -test = ["FileIO", "GeometryTypes", "Gtk", "ImageMagick", "Images", "LaTeXStrings", "LibGit2", "OffsetArrays", "PGFPlotsX", "Random", "RDatasets", "StaticArrays", "StatsPlots", "Test", "UnicodePlots", "VisualRegressionTests"] +test = ["FileIO", "GeometryTypes", "Gtk", "ImageMagick", "Images", "LaTeXStrings", "LibGit2", "OffsetArrays", "PGFPlotsX", "HDF5", "Random", "RDatasets", "StaticArrays", "StatsPlots", "Test", "UnicodePlots", "VisualRegressionTests"] diff --git a/test/runtests.jl b/test/runtests.jl index 5ddc6818..9b36f097 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -9,6 +9,7 @@ using LibGit2 using GeometryTypes using Dates +include("test_hdf5plots.jl") include("test_pgfplotsx.jl") reference_dir(args...) = joinpath(homedir(), ".julia", "dev", "PlotReferenceImages", args...) diff --git a/test/test_hdf5plots.jl b/test/test_hdf5plots.jl new file mode 100644 index 00000000..2c106025 --- /dev/null +++ b/test/test_hdf5plots.jl @@ -0,0 +1,21 @@ +using Plots, HDF5 + + +@testset "HDF5_Plots" begin + fname = "tmpplotsave.hdf5" + hdf5() + + x = 1:10 + psrc=plot(x, x.*x); #Create some plot + Plots.hdf5plot_write(psrc, fname) + + #Read back file: + gr() #Choose some fast backend likely to work in test environment. + pread = Plots.hdf5plot_read(fname) + + #Make sure data made it through: + @test psrc.subplots[1].series_list[1][:x] == pread.subplots[1].series_list[1][:x] + @test psrc.subplots[1].series_list[1][:y] == pread.subplots[1].series_list[1][:y] + + #display(pread) #Don't display. Regression env might not support +end #testset From c50a5bf12331ab610a141c4244cd93954b7bf1d2 Mon Sep 17 00:00:00 2001 From: keorn Date: Sat, 21 Mar 2020 14:41:56 +0100 Subject: [PATCH 29/77] allow plotly json saving --- src/output.jl | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/output.jl b/src/output.jl index 3e0f5bf3..1bd5e9f3 100644 --- a/src/output.jl +++ b/src/output.jl @@ -52,6 +52,14 @@ function tex(plt::Plot, fn::AbstractString) end tex(fn::AbstractString) = tex(current(), fn) +function json(plt::Plot, fn::AbstractString) + fn = addExtension(fn, "json") + io = open(fn, "w") + show(io, MIME("application/vnd.plotly.v1+json"), plt) + close(io) +end +json(fn::AbstractString) = json(current(), fn) + function html(plt::Plot, fn::AbstractString) fn = addExtension(fn, "html") io = open(fn, "w") @@ -78,6 +86,7 @@ const _savemap = Dict( "ps" => ps, "eps" => eps, "tex" => tex, + "json" => json, "html" => html, "tikz" => tex, "txt" => txt, From 55bb6fda1b81c57f5f47bd471e0f8df4220975b6 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Wed, 18 Mar 2020 23:06:33 +0100 Subject: [PATCH 30/77] uniform length 4 indentation in utils.jl --- src/utils.jl | 330 +++++++++++++++++---------------------------------- 1 file changed, 106 insertions(+), 224 deletions(-) diff --git a/src/utils.jl b/src/utils.jl index ef15b8b5..84dde718 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -1,119 +1,4 @@ -calcMidpoints(edges::AbstractVector) = Float64[0.5 * (edges[i] + edges[i+1]) for i in 1:length(edges)-1] - -"Make histogram-like bins of data" -function binData(data, nbins) - lo, hi = ignorenan_extrema(data) - edges = collect(range(lo, stop=hi, length=nbins+1)) - midpoints = calcMidpoints(edges) - buckets = Int[max(2, min(searchsortedfirst(edges, x), length(edges)))-1 for x in data] - counts = zeros(Int, length(midpoints)) - for b in buckets - counts[b] += 1 - end - edges, midpoints, buckets, counts -end - -""" -A hacky replacement for a histogram when the backend doesn't support histograms directly. -Convert it into a bar chart with the appropriate x/y values. -""" -function histogramHack(; kw...) - plotattributes = KW(kw) - - # we assume that the y kwarg is set with the data to be binned, and nbins is also defined - edges, midpoints, buckets, counts = binData(plotattributes[:y], plotattributes[:bins]) - plotattributes[:x] = midpoints - plotattributes[:y] = float(counts) - plotattributes[:seriestype] = :bar - plotattributes[:fillrange] = plotattributes[:fillrange] === nothing ? 0.0 : plotattributes[:fillrange] - plotattributes -end - -""" -A hacky replacement for a bar graph when the backend doesn't support bars directly. -Convert it into a line chart with fillrange set. -""" -function barHack(; kw...) - plotattributes = KW(kw) - midpoints = plotattributes[:x] - heights = plotattributes[:y] - fillrange = plotattributes[:fillrange] === nothing ? 0.0 : plotattributes[:fillrange] - - # estimate the edges - dists = diff(midpoints) * 0.5 - edges = zeros(length(midpoints)+1) - for i in eachindex(edges) - if i == 1 - edge = midpoints[1] - dists[1] - elseif i == length(edges) - edge = midpoints[i-1] + dists[i-2] - else - edge = midpoints[i-1] + dists[i-1] - end - edges[i] = edge - end - - x = Float64[] - y = Float64[] - for i in eachindex(heights) - e1, e2 = edges[i:i+1] - append!(x, [e1, e1, e2, e2]) - append!(y, [fillrange, heights[i], heights[i], fillrange]) - end - - plotattributes[:x] = x - plotattributes[:y] = y - plotattributes[:seriestype] = :path - plotattributes[:fillrange] = fillrange - plotattributes -end - - -""" -A hacky replacement for a sticks graph when the backend doesn't support sticks directly. -Convert it into a line chart that traces the sticks, and a scatter that sets markers at the points. -""" -function sticksHack(; kw...) - plotattributesLine = KW(kw) - plotattributesScatter = copy(plotattributesLine) - - # these are the line vertices - x = Float64[] - y = Float64[] - fillrange = plotattributesLine[:fillrange] === nothing ? 0.0 : plotattributesLine[:fillrange] - - # calculate the vertices - yScatter = plotattributesScatter[:y] - for (i,xi) in enumerate(plotattributesScatter[:x]) - yi = yScatter[i] - for j in 1:3 push!(x, xi) end - append!(y, [fillrange, yScatter[i], fillrange]) - end - - # change the line args - plotattributesLine[:x] = x - plotattributesLine[:y] = y - plotattributesLine[:seriestype] = :path - plotattributesLine[:markershape] = :none - plotattributesLine[:fillrange] = nothing - - # change the scatter args - plotattributesScatter[:seriestype] = :none - - plotattributesLine, plotattributesScatter -end - -function regressionXY(x, y) - # regress - β, α = convert(Matrix{Float64}, [x ones(length(x))]) \ convert(Vector{Float64}, y) - - # make a line segment - regx = [ignorenan_minimum(x), ignorenan_maximum(x)] - regy = β * regx + α - regx, regy -end - function replace_image_with_heatmap(z::Array{T}) where T<:Colorant n, m = size(z) colors = ColorGradient(vec(z)) @@ -262,10 +147,10 @@ mapFuncOrFuncs(f::Function, u::AVec) = map(f, u) mapFuncOrFuncs(fs::AVec{F}, u::AVec) where {F<:Function} = [map(f, u) for f in fs] for i in 2:4 - @eval begin - unzip(v::Union{AVec{<:Tuple{Vararg{T,$i} where T}}, + @eval begin + unzip(v::Union{AVec{<:Tuple{Vararg{T,$i} where T}}, AVec{<:GeometryTypes.Point{$i}}}) = $(Expr(:tuple, (:([t[$j] for t in v]) for j=1:i)...)) - end + end end unzip(v::Union{AVec{<:GeometryTypes.Point{N}}, @@ -275,15 +160,13 @@ unzip(v::Union{AVec{<:GeometryTypes.Point}, # given 2-element lims and a vector of data x, widen lims to account for the extrema of x function _expand_limits(lims, x) - try - e1, e2 = ignorenan_extrema(x) - lims[1] = NaNMath.min(lims[1], e1) - lims[2] = NaNMath.max(lims[2], e2) - # catch err - # @warn(err) - catch - end - nothing + try + e1, e2 = ignorenan_extrema(x) + lims[1] = NaNMath.min(lims[1], e1) + lims[2] = NaNMath.max(lims[2], e2) + catch + end + nothing end expand_data(v, n::Integer) = [_cycle(v, i) for i=1:n] @@ -301,21 +184,21 @@ function addOrReplace(v::AbstractVector, t::DataType, args...; kw...) end function replaceType(vec, val) - filter!(x -> !isa(x, typeof(val)), vec) - push!(vec, val) + filter!(x -> !isa(x, typeof(val)), vec) + push!(vec, val) end function replaceAlias!(plotattributes::AKW, k::Symbol, aliases::Dict{Symbol,Symbol}) - if haskey(aliases, k) - plotattributes[aliases[k]] = pop_kw!(plotattributes, k) - end + if haskey(aliases, k) + plotattributes[aliases[k]] = pop_kw!(plotattributes, k) + end end function replaceAliases!(plotattributes::AKW, aliases::Dict{Symbol,Symbol}) - ks = collect(keys(plotattributes)) - for k in ks - replaceAlias!(plotattributes, k, aliases) - end + ks = collect(keys(plotattributes)) + for k in ks + replaceAlias!(plotattributes, k, aliases) + end end createSegments(z) = collect(repeat(reshape(z,1,:),2,1))[2:end] @@ -334,20 +217,20 @@ const _scale_base = Dict{Symbol, Real}( ) function _heatmap_edges(v::AVec, isedges::Bool = false) - length(v) == 1 && return v[1] .+ [-0.5, 0.5] - if isedges return v end - # `isedges = true` means that v is a vector which already describes edges - # and does not need to be extended. - vmin, vmax = ignorenan_extrema(v) - extra_min = (v[2] - v[1]) / 2 - extra_max = (v[end] - v[end - 1]) / 2 - vcat(vmin-extra_min, 0.5 * (v[1:end-1] + v[2:end]), vmax+extra_max) + length(v) == 1 && return v[1] .+ [-0.5, 0.5] + if isedges return v end + # `isedges = true` means that v is a vector which already describes edges + # and does not need to be extended. + vmin, vmax = ignorenan_extrema(v) + extra_min = (v[2] - v[1]) / 2 + extra_max = (v[end] - v[end - 1]) / 2 + vcat(vmin-extra_min, 0.5 * (v[1:end-1] + v[2:end]), vmax+extra_max) end "create an (n+1) list of the outsides of heatmap rectangles" function heatmap_edges(v::AVec, scale::Symbol = :identity, isedges::Bool = false) - f, invf = scalefunc(scale), invscalefunc(scale) - map(invf, _heatmap_edges(map(f,v), isedges)) + f, invf = scalefunc(scale), invscalefunc(scale) + map(invf, _heatmap_edges(map(f,v), isedges)) end function heatmap_edges(x::AVec, xscale::Symbol, y::AVec, yscale::Symbol, z_size::Tuple{Int, Int}) @@ -367,8 +250,8 @@ function heatmap_edges(x::AVec, xscale::Symbol, y::AVec, yscale::Symbol, z_size: end function is_uniformly_spaced(v; tol=1e-6) - dv = diff(v) - maximum(dv) - minimum(dv) < tol * mean(abs.(dv)) + dv = diff(v) + maximum(dv) - minimum(dv) < tol * mean(abs.(dv)) end function convert_to_polar(theta, r, r_extrema = ignorenan_extrema(r)) @@ -380,11 +263,11 @@ function convert_to_polar(theta, r, r_extrema = ignorenan_extrema(r)) end function fakedata(sz...) - y = zeros(sz...) - for r in 2:size(y,1) - y[r,:] = 0.95 * vec(y[r-1,:]) + randn(size(y,2)) - end - y + y = zeros(sz...) + for r in 2:size(y,1) + y[r,:] = 0.95 * vec(y[r-1,:]) + randn(size(y,2)) + end + y end isijulia() = :IJulia in nameof.(collect(values(Base.loaded_modules))) @@ -752,105 +635,105 @@ function with(f::Function, args...; kw...) newdefs[:legend] = false end - # dict to store old and new keyword args for anything that changes - olddefs = KW() - for k in keys(newdefs) - olddefs[k] = default(k) - end - - # save the backend - if CURRENT_BACKEND.sym == :none - _pick_default_backend() - end - oldbackend = CURRENT_BACKEND.sym - - for arg in args - - # change backend? - if arg in backends() - backend(arg) + # dict to store old and new keyword args for anything that changes + olddefs = KW() + for k in keys(newdefs) + olddefs[k] = default(k) end - # # TODO: generalize this strategy to allow args as much as possible - # # as in: with(:gr, :scatter, :legend, :grid) do; ...; end - # # TODO: can we generalize this enough to also do something similar in the plot commands?? + # save the backend + if CURRENT_BACKEND.sym == :none + _pick_default_backend() + end + oldbackend = CURRENT_BACKEND.sym - # k = :seriestype - # if arg in _allTypes - # olddefs[k] = default(k) - # newdefs[k] = arg - # elseif haskey(_typeAliases, arg) - # olddefs[k] = default(k) - # newdefs[k] = _typeAliases[arg] - # end + for arg in args - k = :legend - if arg in (k, :leg) - olddefs[k] = default(k) - newdefs[k] = true + # change backend? + if arg in backends() + backend(arg) + end + + # TODO: generalize this strategy to allow args as much as possible + # as in: with(:gr, :scatter, :legend, :grid) do; ...; end + # TODO: can we generalize this enough to also do something similar in the plot commands?? + + # k = :seriestype + # if arg in _allTypes + # olddefs[k] = default(k) + # newdefs[k] = arg + # elseif haskey(_typeAliases, arg) + # olddefs[k] = default(k) + # newdefs[k] = _typeAliases[arg] + # end + + k = :legend + if arg in (k, :leg) + olddefs[k] = default(k) + newdefs[k] = true + end + + k = :grid + if arg == k + olddefs[k] = default(k) + newdefs[k] = true + end end - k = :grid - if arg == k - olddefs[k] = default(k) - newdefs[k] = true + # display(olddefs) + # display(newdefs) + + # now set all those defaults + default(; newdefs...) + + # call the function + ret = f() + + # put the defaults back + default(; olddefs...) + + # revert the backend + if CURRENT_BACKEND.sym != oldbackend + backend(oldbackend) end - end - # display(olddefs) - # display(newdefs) - - # now set all those defaults - default(; newdefs...) - - # call the function - ret = f() - - # put the defaults back - default(; olddefs...) - - # revert the backend - if CURRENT_BACKEND.sym != oldbackend - backend(oldbackend) - end - - # return the result of the function - ret + # return the result of the function + ret end # --------------------------------------------------------------- # --------------------------------------------------------------- mutable struct DebugMode - on::Bool + on::Bool end const _debugMode = DebugMode(false) function debugplots(on = true) - _debugMode.on = on + _debugMode.on = on end debugshow(io, x) = show(io, x) debugshow(io, x::AbstractArray) = print(io, summary(x)) function dumpdict(io::IO, plotattributes::AKW, prefix = "", alwaysshow = false) - _debugMode.on || alwaysshow || return - println(io) - if prefix != "" - println(io, prefix, ":") - end - for k in sort(collect(keys(plotattributes))) - @printf("%14s: ", k) - debugshow(io, plotattributes[k]) + _debugMode.on || alwaysshow || return + println(io) + if prefix != "" + println(io, prefix, ":") + end + for k in sort(collect(keys(plotattributes))) + @printf("%14s: ", k) + debugshow(io, plotattributes[k]) + println(io) + end println(io) - end - println(io) end DD(io::IO, plotattributes::AKW, prefix = "") = dumpdict(io, plotattributes, prefix, true) DD(plotattributes::AKW, prefix = "") = DD(stdout, plotattributes, prefix) function dumpcallstack() - error() # well... you wanted the stacktrace, didn't you?!? + error() # well... you wanted the stacktrace, didn't you?!? end # --------------------------------------------------------------- @@ -858,13 +741,12 @@ end # used in updating an existing series extendSeriesByOne(v::UnitRange{Int}, n::Int = 1) = isempty(v) ? (1:n) : (minimum(v):maximum(v)+n) -extendSeriesByOne(v::AVec, n::Integer = 1) = isempty(v) ? (1:n) : vcat(v, (1:n) + ignorenan_maximum(v)) +extendSeriesByOne(v::AVec, n::Integer = 1) = isempty(v) ? (1:n) : vcat(v, (1:n) .+ ignorenan_maximum(v)) extendSeriesData(v::AbstractRange{T}, z::Real) where {T} = extendSeriesData(float(collect(v)), z) extendSeriesData(v::AbstractRange{T}, z::AVec) where {T} = extendSeriesData(float(collect(v)), z) extendSeriesData(v::AVec{T}, z::Real) where {T} = (push!(v, convert(T, z)); v) extendSeriesData(v::AVec{T}, z::AVec) where {T} = (append!(v, convert(Vector{T}, z)); v) - # ------------------------------------------------------- # NOTE: backends should implement the following methods to get/set the x/y/z data objects From 4e5e9986a1def8ca1d6db146a64de0ece5ed5758 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Sat, 21 Mar 2020 22:52:09 +0100 Subject: [PATCH 31/77] reimplement push! (copy if series shares data with other series) --- src/utils.jl | 141 +++++++++++++++++++++------------------------------ 1 file changed, 57 insertions(+), 84 deletions(-) diff --git a/src/utils.jl b/src/utils.jl index 84dde718..db1128b9 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -736,17 +736,6 @@ function dumpcallstack() error() # well... you wanted the stacktrace, didn't you?!? end -# --------------------------------------------------------------- -# --------------------------------------------------------------- -# used in updating an existing series - -extendSeriesByOne(v::UnitRange{Int}, n::Int = 1) = isempty(v) ? (1:n) : (minimum(v):maximum(v)+n) -extendSeriesByOne(v::AVec, n::Integer = 1) = isempty(v) ? (1:n) : vcat(v, (1:n) .+ ignorenan_maximum(v)) -extendSeriesData(v::AbstractRange{T}, z::Real) where {T} = extendSeriesData(float(collect(v)), z) -extendSeriesData(v::AbstractRange{T}, z::AVec) where {T} = extendSeriesData(float(collect(v)), z) -extendSeriesData(v::AVec{T}, z::Real) where {T} = (push!(v, convert(T, z)); v) -extendSeriesData(v::AVec{T}, z::AVec) where {T} = (append!(v, convert(Vector{T}, z)); v) - # ------------------------------------------------------- # NOTE: backends should implement the following methods to get/set the x/y/z data objects @@ -790,33 +779,60 @@ Base.setindex!(plt::Plot, xy::Tuple{X,Y}, i::Integer) where {X,Y} = (setxy!(plt, Base.setindex!(plt::Plot, xyz::Tuple{X,Y,Z}, i::Integer) where {X,Y,Z} = (setxyz!(plt, xyz, i); plt) # ------------------------------------------------------- - # operate on individual series -function push_x!(series::Series, xi) - push!(series[:x], xi) - expand_extrema!(series[:subplot][:xaxis], xi) - return -end -function push_y!(series::Series, yi) - push!(series[:y], yi) - expand_extrema!(series[:subplot][:yaxis], yi) - return -end -function push_z!(series::Series, zi) - push!(series[:z], zi) - expand_extrema!(series[:subplot][:zaxis], zi) - return +Base.push!(series::Series, args...) = extend_series!(series, args...) +Base.append!(series::Series, args...) = extend_series!(series, args...) + +function extend_series!(series::Series, yi) + y = extend_series_data!(series, yi, :y) + x = extend_to_length!(series[:x], length(y)) + expand_extrema!(series[:subplot][:xaxis], x) + return x, y end -function Base.push!(series::Series, yi) - x = extendSeriesByOne(series[:x]) - expand_extrema!(series[:subplot][:xaxis], x[end]) - series[:x] = x - push_y!(series, yi) +function extend_series!(series::Series, xi, yi) + x = extend_series_data!(series, xi, :x) + y = extend_series_data!(series, yi, :y) + return x, y +end + +function extend_series!(series::Series, xi, yi, zi) + x = extend_series_data!(series, xi, :x) + y = extend_series_data!(series, yi, :y) + z = extend_series_data!(series, zi, :z) + return x, y, z +end + +function extend_series_data!(series::Series, v, letter) + copy_series!(series, letter) + d = extend_by_data!(series[letter], v) + expand_extrema!(series[:subplot][Symbol(letter, :axis)], d) + return d +end + +function copy_series!(series, letter) + plt = series[:plot_object] + for s in plt.series_list + for l in (:x, :y, :z) + if s !== series || l !== letter + if s[l] === series[letter] + series[letter] = copy(series[letter]) + end + end + end + end +end + +extend_to_length!(v::AbstractRange, n) = range(first(v), step = step(v), length = n) +function extend_to_length!(v::AbstractVector, n) + vmax = isempy(v) ? 0 : ignorenan_maximum(v) + extend_by_data!(v, vmax .+ (1:(n - length(v)))) +end +extend_by_data!(v::AbstractVector, x) = isimmutable(v) ? vcat(v, x) : push!(v, x) +function extend_by_data!(v::AbstractVector, x::AbstractVector) + isimmutable(v) ? vcat(v, x) : append!(v, x) end -Base.push!(series::Series, xi, yi) = (push_x!(series,xi); push_y!(series,yi)) -Base.push!(series::Series, xi, yi, zi) = (push_x!(series,xi); push_y!(series,yi); push_z!(series,zi)) # ------------------------------------------------------- @@ -850,59 +866,16 @@ end # ------------------------------------------------------- # push/append for one series -# push value to first series -Base.push!(plt::Plot, y::Real) = push!(plt, 1, y) -Base.push!(plt::Plot, x::Real, y::Real) = push!(plt, 1, x, y) -Base.push!(plt::Plot, x::Real, y::Real, z::Real) = push!(plt, 1, x, y, z) - -# y only -function Base.push!(plt::Plot, i::Integer, y::Real) - xdata, ydata = getxy(plt, i) - setxy!(plt, (extendSeriesByOne(xdata), extendSeriesData(ydata, y)), i) - plt -end -function Base.append!(plt::Plot, i::Integer, y::AVec) - xdata, ydata = plt[i] - if !isa(xdata, UnitRange{Int}) - error("Expected x is a UnitRange since you're trying to push a y value only") - end - plt[i] = (extendSeriesByOne(xdata, length(y)), extendSeriesData(ydata, y)) - plt -end - -# x and y -function Base.push!(plt::Plot, i::Integer, x::Real, y::Real) - xdata, ydata = getxy(plt, i) - setxy!(plt, (extendSeriesData(xdata, x), extendSeriesData(ydata, y)), i) - plt -end -function Base.append!(plt::Plot, i::Integer, x::AVec, y::AVec) - @assert length(x) == length(y) - xdata, ydata = getxy(plt, i) - setxy!(plt, (extendSeriesData(xdata, x), extendSeriesData(ydata, y)), i) - plt -end - -# x, y, and z -function Base.push!(plt::Plot, i::Integer, x::Real, y::Real, z::Real) - # @show i, x, y, z - xdata, ydata, zdata = getxyz(plt, i) - # @show xdata, ydata, zdata - setxyz!(plt, (extendSeriesData(xdata, x), extendSeriesData(ydata, y), extendSeriesData(zdata, z)), i) - plt -end -function Base.append!(plt::Plot, i::Integer, x::AVec, y::AVec, z::AVec) - @assert length(x) == length(y) == length(z) - xdata, ydata, zdata = getxyz(plt, i) - setxyz!(plt, (extendSeriesData(xdata, x), extendSeriesData(ydata, y), extendSeriesData(zdata, z)), i) - plt -end +Base.push!(plt::Plot, args::Real...) = push!(plt, 1, args...) +Base.push!(plt::Plot, i::Integer, args::Real...) = push!(plt.series_list[i], args...) +Base.append!(plt::Plot, args::AbstractVector...) = append!(plt, 1, args...) +Base.append!(plt::Plot, i::Integer, args::Real...) = append!(plt.series_list[i], args...) # tuples -Base.push!(plt::Plot, xy::Tuple{X,Y}) where {X,Y} = push!(plt, 1, xy...) -Base.push!(plt::Plot, xyz::Tuple{X,Y,Z}) where {X,Y,Z} = push!(plt, 1, xyz...) -Base.push!(plt::Plot, i::Integer, xy::Tuple{X,Y}) where {X,Y} = push!(plt, i, xy...) -Base.push!(plt::Plot, i::Integer, xyz::Tuple{X,Y,Z}) where {X,Y,Z} = push!(plt, i, xyz...) +Base.push!(plt::Plot, t::Tuple) = push!(plt, 1, t...) +Base.push!(plt::Plot, i::Integer, t::Tuple) = push!(plt, i, t...) +Base.append!(plt::Plot, t::Tuple) = append!(plt, 1, t...) +Base.append!(plt::Plot, i::Integer, t::Tuple) = append!(plt, i, t...) # ------------------------------------------------------- # push/append for all series From ed8e72c1bc99eecda54ab3e31cf4e7dab6320516 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Sat, 21 Mar 2020 23:02:14 +0100 Subject: [PATCH 32/77] don't copy series data --- src/series.jl | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/src/series.jl b/src/series.jl index 211472c0..a99a66aa 100644 --- a/src/series.jl +++ b/src/series.jl @@ -70,23 +70,19 @@ process_ribbon(ribbon::Tuple{Any,Any}, plotattributes) = collect(zip(convertToAn # -------------------------------------------------------------------- -# TODO: can we avoid the copy here? one error that crops up is that mapping functions over the same array -# result in that array being shared. push!, etc will add too many items to that array +compute_x(x::Nothing, y::Nothing, z) = axes(z,1) +compute_x(x::Nothing, y, z) = axes(y,1) +compute_x(x::Function, y, z) = map(x, y) +compute_x(x, y, z) = x -compute_x(x::Nothing, y::Nothing, z) = axes(z,1) -compute_x(x::Nothing, y, z) = axes(y,1) -compute_x(x::Function, y, z) = map(x, y) -compute_x(x, y, z) = copy(x) +compute_y(x::Nothing, y::Nothing, z) = axes(z,2) +compute_y(x, y::Function, z) = map(y, x) +compute_y(x, y, z) = y -# compute_y(x::Void, y::Function, z) = error() -compute_y(x::Nothing, y::Nothing, z) = axes(z,2) -compute_y(x, y::Function, z) = map(y, x) -compute_y(x, y, z) = copy(y) - -compute_z(x, y, z::Function) = map(z, x, y) -compute_z(x, y, z::AbstractMatrix) = Surface(z) -compute_z(x, y, z::Nothing) = nothing -compute_z(x, y, z) = copy(z) +compute_z(x, y, z::Function) = map(z, x, y) +compute_z(x, y, z::AbstractMatrix) = Surface(z) +compute_z(x, y, z::Nothing) = nothing +compute_z(x, y, z) = z nobigs(v::AVec{BigFloat}) = map(Float64, v) nobigs(v::AVec{BigInt}) = map(Int64, v) From ca9e47bc4d1f4c333f6cc443a0d3ea5e2aa78c46 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Sun, 22 Mar 2020 10:45:02 +0100 Subject: [PATCH 33/77] update precompile files --- deps/generateprecompiles.jl | 6 +- src/precompile.jl | 449 +++++++++++++++++++++++------------- 2 files changed, 291 insertions(+), 164 deletions(-) diff --git a/deps/generateprecompiles.jl b/deps/generateprecompiles.jl index 5bf3d6be..a30d9786 100644 --- a/deps/generateprecompiles.jl +++ b/deps/generateprecompiles.jl @@ -26,13 +26,15 @@ using SnoopCompile +project_flag = string("--project=", joinpath(homedir(), ".julia", "dev", "Plots")) log_path = joinpath(tempdir(), "compiles.log") precompiles_path = joinpath(tempdir(), "precompile") # run examples with GR backend, logging what needs to be compiled -SnoopCompile.@snoopc log_path begin +SnoopCompile.@snoopc project_flag log_path begin using Plots - Plots.test_examples(:gr, disp=true) + Plots.test_examples(:gr) + Plots.test_examples(:plotly, skip = Plots._backend_skips[:plotly]) end # precompile calls containing the following strings are dropped diff --git a/src/precompile.jl b/src/precompile.jl index c5804950..c5ea00d8 100644 --- a/src/precompile.jl +++ b/src/precompile.jl @@ -5,19 +5,17 @@ function _precompile_() isdefined(Plots, Symbol("#kw##_make_hist")) && precompile(Tuple{getfield(Plots, Symbol("#kw##_make_hist")), NamedTuple{(:normed, :weights), Tuple{Bool, Nothing}}, typeof(Plots._make_hist), Tuple{Array{Float64, 1}, Array{Float64, 1}}, Int64}) isdefined(Plots, Symbol("#kw##_make_hist")) && precompile(Tuple{getfield(Plots, Symbol("#kw##_make_hist")), NamedTuple{(:normed, :weights), Tuple{Bool, Nothing}}, typeof(Plots._make_hist), Tuple{Array{Float64, 1}, Array{Float64, 1}}, Tuple{Int64, Int64}}) isdefined(Plots, Symbol("#kw##_make_hist")) && precompile(Tuple{getfield(Plots, Symbol("#kw##_make_hist")), NamedTuple{(:normed, :weights), Tuple{Bool, Nothing}}, typeof(Plots._make_hist), Tuple{Array{Float64, 1}}, Symbol}) - isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:flip,), Tuple{Bool}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:foreground_color_grid, :grid, :gridalpha, :gridstyle, :gridlinewidth), Tuple{ColorTypes.RGBA{Float64}, Bool, Float64, Symbol, Int64}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:formatter,), Tuple{Symbol}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:grid, :lims), Tuple{Bool, Tuple{Int64, Int64}}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:grid, :lims, :flip), Tuple{Bool, Tuple{Int64, Int64}, Bool}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:grid, :ticks), Tuple{Bool, Nothing}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:grid,), Tuple{Bool}}, typeof(Plots.attr!), Plots.Axis}) - isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:grid,), Tuple{Bool}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:guide,), Tuple{String}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:lims, :flip, :ticks, :guide), Tuple{Tuple{Int64, Int64}, Bool, Base.StepRange{Int64, Int64}, String}}, typeof(Plots.attr!), Plots.Axis}) + isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:lims,), Tuple{Tuple{Float64, Float64}}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:lims,), Tuple{Tuple{Int64, Float64}}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:lims,), Tuple{Tuple{Int64, Int64}}}, typeof(Plots.attr!), Plots.Axis}) - isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:lims,), Tuple{Tuple{Int64, Int64}}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:rotation,), Tuple{Int64}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:scale, :guide), Tuple{Symbol, String}}, typeof(Plots.attr!), Plots.Axis}) isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:ticks,), Tuple{Base.UnitRange{Int64}}}, typeof(Plots.attr!), Plots.Axis}) @@ -25,82 +23,98 @@ function _precompile_() isdefined(Plots, Symbol("#kw##contour")) && precompile(Tuple{getfield(Plots, Symbol("#kw##contour")), NamedTuple{(:fill,), Tuple{Bool}}, typeof(Plots.contour), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Int}) isdefined(Plots, Symbol("#kw##gr_polyline")) && precompile(Tuple{getfield(Plots, Symbol("#kw##gr_polyline")), NamedTuple{(:arrowside, :arrowstyle), Tuple{Symbol, Symbol}}, typeof(Plots.gr_polyline), Array{Float64, 1}, Array{Float64, 1}}) isdefined(Plots, Symbol("#kw##gr_polyline")) && precompile(Tuple{getfield(Plots, Symbol("#kw##gr_polyline")), NamedTuple{(:arrowside, :arrowstyle), Tuple{Symbol, Symbol}}, typeof(Plots.gr_polyline), Array{Int64, 1}, Array{Float64, 1}}) + isdefined(Plots, Symbol("#kw##gr_polyline")) && precompile(Tuple{getfield(Plots, Symbol("#kw##gr_polyline")), NamedTuple{(:arrowside, :arrowstyle), Tuple{Symbol, Symbol}}, typeof(Plots.gr_polyline), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}) + isdefined(Plots, Symbol("#kw##gr_polyline")) && precompile(Tuple{getfield(Plots, Symbol("#kw##gr_polyline")), NamedTuple{(:arrowside, :arrowstyle), Tuple{Symbol, Symbol}}, typeof(Plots.gr_polyline), Base.StepRange{Int64, Int64}, Array{Float64, 1}}) isdefined(Plots, Symbol("#kw##gr_polyline")) && precompile(Tuple{getfield(Plots, Symbol("#kw##gr_polyline")), NamedTuple{(:arrowside, :arrowstyle), Tuple{Symbol, Symbol}}, typeof(Plots.gr_polyline), Base.UnitRange{Int64}, Array{Float64, 1}}) + isdefined(Plots, Symbol("#kw##gr_polyline")) && precompile(Tuple{getfield(Plots, Symbol("#kw##gr_polyline")), NamedTuple{(:arrowside, :arrowstyle), Tuple{Symbol, Symbol}}, typeof(Plots.gr_polyline), Base.UnitRange{Int64}, Base.UnitRange{Int64}}) isdefined(Plots, Symbol("#kw##gr_set_font")) && precompile(Tuple{getfield(Plots, Symbol("#kw##gr_set_font")), NamedTuple{(:halign, :valign, :rotation), Tuple{Symbol, Symbol, Int64}}, typeof(Plots.gr_set_font), Plots.Font}) isdefined(Plots, Symbol("#kw##heatmap")) && precompile(Tuple{getfield(Plots, Symbol("#kw##heatmap")), NamedTuple{(:aspect_ratio,), Tuple{Int64}}, typeof(Plots.heatmap), Array{String, 1}, Int}) isdefined(Plots, Symbol("#kw##histogram")) && precompile(Tuple{getfield(Plots, Symbol("#kw##histogram")), NamedTuple{(:bins, :weights), Tuple{Symbol, Array{Int64, 1}}}, typeof(Plots.histogram), Array{Float64, 1}}) isdefined(Plots, Symbol("#kw##histogram2d")) && precompile(Tuple{getfield(Plots, Symbol("#kw##histogram2d")), NamedTuple{(:nbins, :show_empty_bins, :normed, :aspect_ratio), Tuple{Tuple{Int64, Int64}, Bool, Bool, Int64}}, typeof(Plots.histogram2d), Array{Base.Complex{Float64}, 1}}) isdefined(Plots, Symbol("#kw##histogram2d")) && precompile(Tuple{getfield(Plots, Symbol("#kw##histogram2d")), NamedTuple{(:nbins,), Tuple{Int64}}, typeof(Plots.histogram2d), Array{Float64, 1}, Array{Float64, 1}}) isdefined(Plots, Symbol("#kw##hline!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##hline!")), NamedTuple{(:line,), Tuple{Tuple{Int64, Symbol, Float64, Array{Symbol, 2}}}}, typeof(Plots.hline!), Array{Float64, 2}}) + isdefined(Plots, Symbol("#kw##lens!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##lens!")), NamedTuple{(:inset,), Tuple{Tuple{Int64, Measures.BoundingBox{Tuple{Measures.Length{:w, Float64}, Measures.Length{:h, Float64}}, Tuple{Measures.Length{:w, Float64}, Measures.Length{:h, Float64}}}}}}, typeof(Plots.lens!), Array{Int64, 1}, Int}) isdefined(Plots, Symbol("#kw##pie")) && precompile(Tuple{getfield(Plots, Symbol("#kw##pie")), NamedTuple{(:title, :l), Tuple{String, Float64}}, typeof(Plots.pie), Array{String, 1}, Int}) + isdefined(Plots, Symbol("#kw##plotly_annotation_dict")) && precompile(Tuple{getfield(Plots, Symbol("#kw##plotly_annotation_dict")), NamedTuple{(:xref, :yref), Tuple{String, String}}, typeof(Plots.plotly_annotation_dict), Float64, Float64, Plots.PlotText}) + isdefined(Plots, Symbol("#kw##plotly_annotation_dict")) && precompile(Tuple{getfield(Plots, Symbol("#kw##plotly_annotation_dict")), NamedTuple{(:xref, :yref), Tuple{String, String}}, typeof(Plots.plotly_annotation_dict), Float64, Float64, String}) + isdefined(Plots, Symbol("#kw##plotly_annotation_dict")) && precompile(Tuple{getfield(Plots, Symbol("#kw##plotly_annotation_dict")), NamedTuple{(:xref, :yref), Tuple{String, String}}, typeof(Plots.plotly_annotation_dict), Int64, Float64, Plots.PlotText}) + isdefined(Plots, Symbol("#kw##plotly_annotation_dict")) && precompile(Tuple{getfield(Plots, Symbol("#kw##plotly_annotation_dict")), NamedTuple{(:xref, :yref), Tuple{String, String}}, typeof(Plots.plotly_annotation_dict), Int64, Float64, String}) isdefined(Plots, Symbol("#kw##portfoliocomposition")) && precompile(Tuple{getfield(Plots, Symbol("#kw##portfoliocomposition")), NamedTuple{(:labels,), Tuple{Array{String, 2}}}, typeof(Plots.portfoliocomposition), Array{Float64, 2}, Int}) isdefined(Plots, Symbol("#kw##scatter!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##scatter!")), NamedTuple{(:marker, :series_annotations), Tuple{Tuple{Int64, Float64, Symbol}, Array{Any, 1}}}, typeof(Plots.scatter!), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Int}) isdefined(Plots, Symbol("#kw##scatter!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##scatter!")), NamedTuple{(:markersize, :c), Tuple{Int64, Symbol}}, typeof(Plots.scatter!), Array{Float64, 1}}) isdefined(Plots, Symbol("#kw##scatter!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##scatter!")), NamedTuple{(:zcolor, :m, :ms, :lab), Tuple{Array{Float64, 1}, Tuple{Symbol, Float64, Plots.Stroke}, Array{Float64, 1}, String}}, typeof(Plots.scatter!), Array{Float64, 1}}) isdefined(Plots, Symbol("#kw##scatter")) && precompile(Tuple{getfield(Plots, Symbol("#kw##scatter")), NamedTuple{(:framestyle, :title, :color, :layout, :label, :markerstrokewidth, :ticks), Tuple{Array{Symbol, 2}, Array{String, 2}, Base.ReshapedArray{Int64, 2, Base.UnitRange{Int64}, Tuple{}}, Int64, String, Int64, Base.UnitRange{Int64}}}, typeof(Plots.scatter), Array{Array{Float64, 1}, 1}, Array{Array{Float64, 1}, 1}}) isdefined(Plots, Symbol("#kw##scatter")) && precompile(Tuple{getfield(Plots, Symbol("#kw##scatter")), NamedTuple{(:m, :lab, :bg, :xlim, :ylim), Tuple{Tuple{Int64, Symbol}, Array{String, 2}, Symbol, Tuple{Int64, Int64}, Tuple{Int64, Int64}}}, typeof(Plots.scatter), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Int}) - isdefined(Plots, Symbol("#kw##test_examples")) && precompile(Tuple{getfield(Plots, Symbol("#kw##test_examples")), NamedTuple{(:disp,), Tuple{Bool}}, typeof(Plots.test_examples), Symbol}) + isdefined(Plots, Symbol("#kw##scatter")) && precompile(Tuple{getfield(Plots, Symbol("#kw##scatter")), NamedTuple{(:marker_z, :color, :legend), Tuple{typeof(Base.:+), Symbol, Bool}}, typeof(Plots.scatter), Array{Float64, 1}, Array{Float64, 1}}) + isdefined(Plots, Symbol("#kw##standalone_html")) && precompile(Tuple{getfield(Plots, Symbol("#kw##standalone_html")), NamedTuple{(:title,), Tuple{String}}, typeof(Plots.standalone_html), Plots.Plot{Plots.PlotlyBackend}}) + isdefined(Plots, Symbol("#kw##test_examples")) && precompile(Tuple{getfield(Plots, Symbol("#kw##test_examples")), NamedTuple{(:skip,), Tuple{Array{Int64, 1}}}, typeof(Plots.test_examples), Symbol}) precompile(Tuple{typeof(Plots.__init__)}) precompile(Tuple{typeof(Plots._add_errorbar_kw), Array{Base.Dict{Symbol, Any}, 1}, Base.Dict{Symbol, Any}}) - precompile(Tuple{typeof(Plots._add_errorbar_kw), Array{Base.Dict{Symbol, Any}, 1}, Base.Dict{Symbol, Any}}) - precompile(Tuple{typeof(Plots._add_markershape), Base.Dict{Symbol, Any}}) precompile(Tuple{typeof(Plots._add_markershape), Base.Dict{Symbol, Any}}) precompile(Tuple{typeof(Plots._add_smooth_kw), Array{Base.Dict{Symbol, Any}, 1}, Base.Dict{Symbol, Any}}) - 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.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{Array{Float64, 1}, 1}}) precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, Array{Array{T, 1} where T, 1}}) precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, Array{Function, 1}}) + precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, Array{Real, 1}}) precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, Array{String, 1}}) precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, Array{Union{Base.Missing, Int64}, 1}}) precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, typeof(identity)}) precompile(Tuple{typeof(Plots._backend_instance), Symbol}) - precompile(Tuple{typeof(Plots._backend_instance), Symbol}) precompile(Tuple{typeof(Plots._bin_centers), Array{Float64, 1}}) precompile(Tuple{typeof(Plots._binbarlike_baseline), Float64, Symbol}) + precompile(Tuple{typeof(Plots._cbar_unique), Array{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, 1}, String}) + precompile(Tuple{typeof(Plots._cbar_unique), Array{Int64, 1}, String}) precompile(Tuple{typeof(Plots._cbar_unique), Array{Nothing, 1}, String}) precompile(Tuple{typeof(Plots._cbar_unique), Array{PlotUtils.ColorGradient, 1}, String}) + precompile(Tuple{typeof(Plots._cbar_unique), Array{Symbol, 1}, String}) precompile(Tuple{typeof(Plots._create_backend_figure), Plots.Plot{Plots.GRBackend}}) + precompile(Tuple{typeof(Plots._create_backend_figure), Plots.Plot{Plots.PlotlyBackend}}) precompile(Tuple{typeof(Plots._cycle), Array{Any, 1}, Int64}) precompile(Tuple{typeof(Plots._cycle), Array{Float64, 1}, Array{Int64, 1}}) + precompile(Tuple{typeof(Plots._cycle), Array{Float64, 1}, Base.StepRange{Int64, Int64}}) precompile(Tuple{typeof(Plots._cycle), Array{Float64, 1}, Base.UnitRange{Int64}}) precompile(Tuple{typeof(Plots._cycle), Array{Float64, 1}, Int64}) precompile(Tuple{typeof(Plots._cycle), Array{Plots.Subplot{T} where T<:RecipesBase.AbstractBackend, 1}, Int64}) precompile(Tuple{typeof(Plots._cycle), Array{String, 1}, Int64}) precompile(Tuple{typeof(Plots._cycle), Base.OneTo{Int64}, Array{Int64, 1}}) + precompile(Tuple{typeof(Plots._cycle), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Int64}) + precompile(Tuple{typeof(Plots._cycle), Base.StepRange{Int64, Int64}, Array{Int64, 1}}) precompile(Tuple{typeof(Plots._cycle), Base.StepRange{Int64, Int64}, Int64}) precompile(Tuple{typeof(Plots._cycle), ColorTypes.RGBA{Float64}, Int64}) precompile(Tuple{typeof(Plots._cycle), Float64, Int64}) precompile(Tuple{typeof(Plots._cycle), Int64, Base.StepRange{Int64, Int64}}) precompile(Tuple{typeof(Plots._cycle), Int64, Int64}) + precompile(Tuple{typeof(Plots._cycle), Nothing, Array{Int64, 1}}) + precompile(Tuple{typeof(Plots._cycle), Nothing, Base.UnitRange{Int64}}) precompile(Tuple{typeof(Plots._cycle), Nothing, Int64}) precompile(Tuple{typeof(Plots._cycle), Plots.Shape, Int64}) + precompile(Tuple{typeof(Plots._cycle), Plots.Subplot{Plots.GRBackend}, Int64}) + precompile(Tuple{typeof(Plots._cycle), Plots.Subplot{Plots.PlotlyBackend}, Int64}) precompile(Tuple{typeof(Plots._cycle), Symbol, Int64}) precompile(Tuple{typeof(Plots._display), Plots.Plot{Plots.GRBackend}}) - precompile(Tuple{typeof(Plots._display), Plots.Plot{Plots.GRBackend}}) - precompile(Tuple{typeof(Plots._do_plot_show), Plots.Plot{Plots.GRBackend}, Symbol}) + precompile(Tuple{typeof(Plots._do_plot_show), Plots.Plot{Plots.GRBackend}, Bool}) precompile(Tuple{typeof(Plots._do_plot_show), Plots.Plot{Plots.GRBackend}, Symbol}) + precompile(Tuple{typeof(Plots._do_plot_show), Plots.Plot{Plots.PlotlyBackend}, Bool}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{Array{Float64, 1}, 1}, Array{Array{Float64, 1}, 1}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{Array{T, 1} where T, 1}, Array{Float64, 2}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{Array{T, 1} where T, 1}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{Base.Complex{Float64}, 1}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}, Array{Float64, 1}, Base.UnitRange{Int64}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}, Array{Float64, 1}}}) - precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}, Array{Float64, 1}}}) 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, 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{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}, 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}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{Plots.OHLC{T} where T<:Real, 1}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{String, 1}, Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{String, 1}, Array{String, 1}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{Tuple{Int64, Real}, 1}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{Union{Base.Missing, Int64}, 1}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}}) - precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 2}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, 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._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Base.StepRange{Int64, Int64}, Array{Float64, 2}}}) @@ -111,20 +125,18 @@ function _precompile_() precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{Base.Complex{Float64}, 1}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{Float64, 1}, Array{Float64, 1}, Base.UnitRange{Int64}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{Float64, 1}, Array{Float64, 1}}}) - precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{Float64, 1}, Array{Float64, 1}}}) 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, 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{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}, 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}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{Plots.OHLC{T} where T<:Real, 1}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{String, 1}, Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{String, 1}, Array{String, 1}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{Tuple{Int64, Real}, 1}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{Union{Base.Missing, Int64}, 1}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}}) - precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 2}}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, 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._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Base.StepRange{Int64, Int64}, Array{Float64, 2}}}) @@ -138,38 +150,34 @@ function _precompile_() precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{typeof(Base.log), Int64}}) precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{}}) precompile(Tuple{typeof(Plots._expand_subplot_extrema), Plots.Subplot{Plots.GRBackend}, Plots.Attr, Symbol}) - precompile(Tuple{typeof(Plots._expand_subplot_extrema), Plots.Subplot{Plots.GRBackend}, Plots.Attr, Symbol}) + precompile(Tuple{typeof(Plots._expand_subplot_extrema), Plots.Subplot{Plots.PlotlyBackend}, Plots.Attr, Symbol}) precompile(Tuple{typeof(Plots._filter_input_data!), Base.Dict{Symbol, Any}}) precompile(Tuple{typeof(Plots._heatmap_edges), Array{Float64, 1}, Bool}) precompile(Tuple{typeof(Plots._hist_edge), Tuple{Array{Float64, 1}}, Int64, Symbol}) precompile(Tuple{typeof(Plots._hist_edges), Tuple{Array{Float64, 1}, Array{Float64, 1}}, Int64}) precompile(Tuple{typeof(Plots._hist_edges), Tuple{Array{Float64, 1}, Array{Float64, 1}}, Tuple{Int64, Int64}}) precompile(Tuple{typeof(Plots._hist_edges), Tuple{Array{Float64, 1}}, Symbol}) + precompile(Tuple{typeof(Plots._initialize_backend), Plots.PlotlyBackend}) precompile(Tuple{typeof(Plots._override_seriestype_check), Plots.Attr, Symbol}) precompile(Tuple{typeof(Plots._pick_default_backend)}) - precompile(Tuple{typeof(Plots._pick_default_backend)}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Array{Float64, 1}, 1}, Array{Array{Float64, 1}, 1}}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Array{T, 1} where T, 1}, Array{Float64, 2}}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Array{T, 1} where T, 1}}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Base.Complex{Float64}, 1}}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}, Array{Float64, 1}, Base.UnitRange{Int64}}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}, Array{Float64, 1}}}) - precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}, Array{Float64, 1}}}) 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, 1}}}) - 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{Float64, 2}}}) 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}, 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}}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Plots.OHLC{T} where T<:Real, 1}}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{String, 1}, Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{String, 1}, Array{String, 1}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Tuple{Int64, Real}, 1}}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Union{Base.Missing, Int64}, 1}}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}}) - precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 2}}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, 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._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Base.StepRange{Int64, Int64}, Array{Float64, 2}}}) @@ -178,34 +186,54 @@ function _precompile_() precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Plots.Spy}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{typeof(Base.log), Int64}}) precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{}}) - precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{}}) - precompile(Tuple{typeof(Plots._plot_setup), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Array{Base.Dict{Symbol, Any}, 1}}) + precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Array{Float64, 1}, 1}, Array{Array{Float64, 1}, 1}}}) + precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Array{T, 1} where T, 1}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Array{T, 1} where T, 1}}}) + precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Base.Complex{Float64}, 1}}}) + 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{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}}}) + precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{String, 1}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{String, 1}, Array{String, 1}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Tuple{Int64, Real}, 1}}}) + precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Union{Base.Missing, Int64}, 1}}}) + precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, 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._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Base.StepRange{Int64, Int64}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Base.UnitRange{Int64}}}) + precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Plots.PortfolioComposition}}) + precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Plots.Spy}}) + precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{}}) precompile(Tuple{typeof(Plots._plot_setup), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Array{Base.Dict{Symbol, Any}, 1}}) + precompile(Tuple{typeof(Plots._plot_setup), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Array{Base.Dict{Symbol, Any}, 1}}) + precompile(Tuple{typeof(Plots._plotly_framestyle), Symbol}) precompile(Tuple{typeof(Plots._plots_defaults)}) precompile(Tuple{typeof(Plots._prepare_annotations), Plots.Subplot{Plots.GRBackend}, Plots.Attr}) - precompile(Tuple{typeof(Plots._prepare_annotations), Plots.Subplot{Plots.GRBackend}, Plots.Attr}) - precompile(Tuple{typeof(Plots._prepare_subplot), Plots.Plot{Plots.GRBackend}, Plots.Attr}) + precompile(Tuple{typeof(Plots._prepare_annotations), Plots.Subplot{Plots.PlotlyBackend}, Plots.Attr}) precompile(Tuple{typeof(Plots._prepare_subplot), Plots.Plot{Plots.GRBackend}, Plots.Attr}) + precompile(Tuple{typeof(Plots._prepare_subplot), Plots.Plot{Plots.PlotlyBackend}, Plots.Attr}) precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Array{Float64, 1}, 1}, Array{Array{Float64, 1}, 1}}, Array{RecipesBase.RecipeData, 1}}) precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Array{T, 1} where T, 1}, Array{Float64, 2}}, Array{RecipesBase.RecipeData, 1}}) precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Array{T, 1} where T, 1}}, Array{RecipesBase.RecipeData, 1}}) precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Base.Complex{Float64}, 1}}, Array{RecipesBase.RecipeData, 1}}) precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}, Array{Float64, 1}, Base.UnitRange{Int64}}, Array{RecipesBase.RecipeData, 1}}) precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}, Array{Float64, 1}}, Array{RecipesBase.RecipeData, 1}}) - precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}, Array{Float64, 1}}, Array{RecipesBase.RecipeData, 1}}) 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, 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{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}, 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}}) precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Plots.OHLC{T} where T<:Real, 1}}, Array{RecipesBase.RecipeData, 1}}) precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{String, 1}, Array{Float64, 1}}, Array{RecipesBase.RecipeData, 1}}) precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{String, 1}, Array{String, 1}, Array{Float64, 2}}, Array{RecipesBase.RecipeData, 1}}) + precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Tuple{Int64, Real}, 1}}, Array{RecipesBase.RecipeData, 1}}) precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Union{Base.Missing, Int64}, 1}}, Array{RecipesBase.RecipeData, 1}}) precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}, Array{RecipesBase.RecipeData, 1}}) - precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}, Array{RecipesBase.RecipeData, 1}}) precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 2}}, Array{RecipesBase.RecipeData, 1}}) precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 2}}, Array{RecipesBase.RecipeData, 1}}) precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Base.StepRange{Int64, Int64}, Array{Float64, 2}}, Array{RecipesBase.RecipeData, 1}}) @@ -219,34 +247,30 @@ function _precompile_() precompile(Tuple{typeof(Plots._preprocess_barlike), Plots.Attr, Base.OneTo{Int64}, Array{Float64, 1}}) precompile(Tuple{typeof(Plots._preprocess_binlike), Plots.Attr, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}) precompile(Tuple{typeof(Plots._preprocess_userrecipe), Base.Dict{Symbol, Any}}) - precompile(Tuple{typeof(Plots._preprocess_userrecipe), Base.Dict{Symbol, Any}}) - precompile(Tuple{typeof(Plots._process_plotrecipe), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Array{Base.Dict{Symbol, Any}, 1}, Array{Base.Dict{Symbol, Any}, 1}}) precompile(Tuple{typeof(Plots._process_plotrecipe), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Array{Base.Dict{Symbol, Any}, 1}, Array{Base.Dict{Symbol, Any}, 1}}) + precompile(Tuple{typeof(Plots._process_plotrecipe), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Array{Base.Dict{Symbol, Any}, 1}, Array{Base.Dict{Symbol, Any}, 1}}) precompile(Tuple{typeof(Plots._process_seriesrecipe), Plots.Plot{Plots.GRBackend}, Plots.Attr}) - precompile(Tuple{typeof(Plots._process_seriesrecipe), Plots.Plot{Plots.GRBackend}, Plots.Attr}) - precompile(Tuple{typeof(Plots._process_seriesrecipe), Plots.Plot{Plots.GRBackend}, Plots.Attr}) - precompile(Tuple{typeof(Plots._process_userrecipe), Plots.Plot{Plots.GRBackend}, Array{Base.Dict{Symbol, Any}, 1}, RecipesBase.RecipeData}) + precompile(Tuple{typeof(Plots._process_seriesrecipe), Plots.Plot{Plots.PlotlyBackend}, Plots.Attr}) precompile(Tuple{typeof(Plots._process_userrecipe), Plots.Plot{Plots.GRBackend}, Array{Base.Dict{Symbol, Any}, 1}, RecipesBase.RecipeData}) + precompile(Tuple{typeof(Plots._process_userrecipe), Plots.Plot{Plots.PlotlyBackend}, Array{Base.Dict{Symbol, Any}, 1}, RecipesBase.RecipeData}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Array{Float64, 1}, 1}, Array{Array{Float64, 1}, 1}}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Array{T, 1} where T, 1}, Array{Float64, 2}}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Array{T, 1} where T, 1}}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Base.Complex{Float64}, 1}}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}, Array{Float64, 1}, Base.UnitRange{Int64}}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}, Array{Float64, 1}}}) - precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}, Array{Float64, 1}}}) 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, 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{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}, 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}}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Plots.OHLC{T} where T<:Real, 1}}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{String, 1}, Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{String, 1}, Array{String, 1}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Tuple{Int64, Real}, 1}}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Union{Base.Missing, Int64}, 1}}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}}) - precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 2}}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, 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._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Base.StepRange{Int64, Int64}, Array{Float64, 2}}}) @@ -255,69 +279,85 @@ function _precompile_() precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Plots.Spy}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{typeof(Base.log), Int64}}) precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{}}) - precompile(Tuple{typeof(Plots._replace_linewidth), Plots.Attr}) + precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Array{Float64, 1}, 1}, Array{Array{Float64, 1}, 1}}}) + precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Array{T, 1} where T, 1}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Array{T, 1} where T, 1}}}) + precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Base.Complex{Float64}, 1}}}) + 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{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}}}) + precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{String, 1}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{String, 1}, Array{String, 1}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Tuple{Int64, Real}, 1}}}) + precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Union{Base.Missing, Int64}, 1}}}) + precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, 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._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Base.StepRange{Int64, Int64}, Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Base.UnitRange{Int64}}}) + precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Plots.PortfolioComposition}}) + precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{Plots.Spy}}) + precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Tuple{}}) precompile(Tuple{typeof(Plots._replace_linewidth), Plots.Attr}) 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._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}}) precompile(Tuple{typeof(Plots._slice_series_args!), Base.Dict{Symbol, Any}, Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}, Int64}) - precompile(Tuple{typeof(Plots._slice_series_args!), Base.Dict{Symbol, Any}, Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}, Int64}) - precompile(Tuple{typeof(Plots._subplot_setup), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Array{Base.Dict{Symbol, Any}, 1}}) + precompile(Tuple{typeof(Plots._slice_series_args!), Base.Dict{Symbol, Any}, Plots.Plot{Plots.PlotlyBackend}, Plots.Subplot{Plots.PlotlyBackend}, Int64}) + precompile(Tuple{typeof(Plots._slice_series_args!), Plots.Attr, Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}, Int64}) + precompile(Tuple{typeof(Plots._slice_series_args!), Plots.Attr, Plots.Plot{Plots.PlotlyBackend}, Plots.Subplot{Plots.PlotlyBackend}, Int64}) precompile(Tuple{typeof(Plots._subplot_setup), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Array{Base.Dict{Symbol, Any}, 1}}) + precompile(Tuple{typeof(Plots._subplot_setup), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Array{Base.Dict{Symbol, Any}, 1}}) precompile(Tuple{typeof(Plots._transform_ticks), Base.StepRange{Int64, Int64}}) precompile(Tuple{typeof(Plots._transform_ticks), Base.UnitRange{Int64}}) precompile(Tuple{typeof(Plots._transform_ticks), Nothing}) precompile(Tuple{typeof(Plots._transform_ticks), Symbol}) precompile(Tuple{typeof(Plots._update_axis), Plots.Axis, Base.Dict{Symbol, Any}, Symbol, Int64}) - precompile(Tuple{typeof(Plots._update_axis), Plots.Axis, Base.Dict{Symbol, Any}, Symbol, Int64}) - precompile(Tuple{typeof(Plots._update_axis), Plots.Axis, Plots.Attr, Symbol, Int64}) precompile(Tuple{typeof(Plots._update_axis), Plots.Axis, Plots.Attr, Symbol, Int64}) precompile(Tuple{typeof(Plots._update_axis), Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Symbol, Int64}) - precompile(Tuple{typeof(Plots._update_axis), Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Symbol, Int64}) precompile(Tuple{typeof(Plots._update_axis), Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}, Plots.Attr, Symbol, Int64}) - precompile(Tuple{typeof(Plots._update_axis), Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}, Plots.Attr, Symbol, Int64}) - precompile(Tuple{typeof(Plots._update_axis_colors), Plots.Axis}) + precompile(Tuple{typeof(Plots._update_axis), Plots.Plot{Plots.PlotlyBackend}, Plots.Subplot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Symbol, Int64}) + precompile(Tuple{typeof(Plots._update_axis), Plots.Plot{Plots.PlotlyBackend}, Plots.Subplot{Plots.PlotlyBackend}, Plots.Attr, Symbol, Int64}) precompile(Tuple{typeof(Plots._update_axis_colors), Plots.Axis}) precompile(Tuple{typeof(Plots._update_axis_links), Plots.Plot{Plots.GRBackend}, Plots.Axis, Symbol}) - precompile(Tuple{typeof(Plots._update_axis_links), Plots.Plot{Plots.GRBackend}, Plots.Axis, Symbol}) + precompile(Tuple{typeof(Plots._update_axis_links), Plots.Plot{Plots.PlotlyBackend}, Plots.Axis, Symbol}) precompile(Tuple{typeof(Plots._update_clims), Float64, Float64, Float64, Float64}) precompile(Tuple{typeof(Plots._update_clims), Float64, Float64, Int64, Int64}) precompile(Tuple{typeof(Plots._update_min_padding!), Plots.GridLayout}) precompile(Tuple{typeof(Plots._update_min_padding!), Plots.Subplot{Plots.GRBackend}}) - precompile(Tuple{typeof(Plots._update_min_padding!), Plots.Subplot{Plots.GRBackend}}) - precompile(Tuple{typeof(Plots._update_plot_args), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}}) + precompile(Tuple{typeof(Plots._update_min_padding!), Plots.Subplot{Plots.PlotlyBackend}}) precompile(Tuple{typeof(Plots._update_plot_args), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}}) precompile(Tuple{typeof(Plots._update_plot_args), Plots.Plot{Plots.GRBackend}, Plots.Attr}) - precompile(Tuple{typeof(Plots._update_plot_args), Plots.Plot{Plots.GRBackend}, Plots.Attr}) + precompile(Tuple{typeof(Plots._update_plot_args), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}}) + precompile(Tuple{typeof(Plots._update_plot_args), Plots.Plot{Plots.PlotlyBackend}, Plots.Attr}) precompile(Tuple{typeof(Plots._update_series_attributes!), Plots.Attr, Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}}) - precompile(Tuple{typeof(Plots._update_series_attributes!), Plots.Attr, Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}}) - precompile(Tuple{typeof(Plots._update_series_attributes!), Plots.Attr, Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}}) - precompile(Tuple{typeof(Plots._update_subplot_args), Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Int64, Bool}) + precompile(Tuple{typeof(Plots._update_series_attributes!), Plots.Attr, Plots.Plot{Plots.PlotlyBackend}, Plots.Subplot{Plots.PlotlyBackend}}) precompile(Tuple{typeof(Plots._update_subplot_args), Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Int64, Bool}) precompile(Tuple{typeof(Plots._update_subplot_args), Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}, Plots.Attr, Int64, Bool}) - precompile(Tuple{typeof(Plots._update_subplot_args), Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}, Plots.Attr, Int64, Bool}) - precompile(Tuple{typeof(Plots._update_subplot_colors), Plots.Subplot{Plots.GRBackend}}) + precompile(Tuple{typeof(Plots._update_subplot_args), Plots.Plot{Plots.PlotlyBackend}, Plots.Subplot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Int64, Bool}) + precompile(Tuple{typeof(Plots._update_subplot_args), Plots.Plot{Plots.PlotlyBackend}, Plots.Subplot{Plots.PlotlyBackend}, Plots.Attr, Int64, Bool}) precompile(Tuple{typeof(Plots._update_subplot_colors), Plots.Subplot{Plots.GRBackend}}) + precompile(Tuple{typeof(Plots._update_subplot_colors), Plots.Subplot{Plots.PlotlyBackend}}) precompile(Tuple{typeof(Plots._update_subplot_periphery), Plots.Subplot{Plots.GRBackend}, Array{Any, 1}}) - precompile(Tuple{typeof(Plots._update_subplot_periphery), Plots.Subplot{Plots.GRBackend}, Array{Any, 1}}) + precompile(Tuple{typeof(Plots._update_subplot_periphery), Plots.Subplot{Plots.PlotlyBackend}, Array{Any, 1}}) precompile(Tuple{typeof(Plots.addExtension), String, String}) precompile(Tuple{typeof(Plots.add_layout_pct!), Base.Dict{Symbol, Any}, Expr, Int64, Int64}) - precompile(Tuple{typeof(Plots.add_layout_pct!), Base.Dict{Symbol, Any}, Expr, Int64, Int64}) - precompile(Tuple{typeof(Plots.aliasesAndAutopick), Plots.Attr, Symbol, Base.Dict{Symbol, Symbol}, Array{Symbol, 1}, Int64}) precompile(Tuple{typeof(Plots.aliasesAndAutopick), Plots.Attr, Symbol, Base.Dict{Symbol, Symbol}, Array{Symbol, 1}, Int64}) precompile(Tuple{typeof(Plots.all3D), Base.Dict{Symbol, Any}}) precompile(Tuple{typeof(Plots.all3D), Plots.Attr}) precompile(Tuple{typeof(Plots.allAlphas), Int64}) - precompile(Tuple{typeof(Plots.allReals), Int64}) precompile(Tuple{typeof(Plots.allStyles), Int64}) precompile(Tuple{typeof(Plots.allStyles), Symbol}) 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.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}) @@ -326,38 +366,45 @@ function _precompile_() precompile(Tuple{typeof(Plots.axis_drawing_info_3d), Plots.Subplot{Plots.GRBackend}}) precompile(Tuple{typeof(Plots.axis_limits), Plots.Subplot{Plots.GRBackend}, Symbol, Bool, Bool}) precompile(Tuple{typeof(Plots.axis_limits), Plots.Subplot{Plots.GRBackend}, Symbol}) + precompile(Tuple{typeof(Plots.axis_limits), Plots.Subplot{Plots.PlotlyBackend}, Symbol, Bool, Bool}) + precompile(Tuple{typeof(Plots.axis_limits), Plots.Subplot{Plots.PlotlyBackend}, Symbol}) precompile(Tuple{typeof(Plots.backend), Plots.GRBackend}) + precompile(Tuple{typeof(Plots.backend), Plots.PlotlyBackend}) precompile(Tuple{typeof(Plots.backend), Symbol}) - precompile(Tuple{typeof(Plots.backend), Symbol}) - precompile(Tuple{typeof(Plots.backend)}) precompile(Tuple{typeof(Plots.backend)}) precompile(Tuple{typeof(Plots.bar), Array{Float64, 1}}) precompile(Tuple{typeof(Plots.bbox!), Plots.GridLayout, Measures.BoundingBox{Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}, Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}}}) precompile(Tuple{typeof(Plots.bbox!), Plots.Subplot{Plots.GRBackend}, Measures.BoundingBox{Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}, Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}}}) + precompile(Tuple{typeof(Plots.bbox!), Plots.Subplot{Plots.PlotlyBackend}, Measures.BoundingBox{Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}, Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}}}) + precompile(Tuple{typeof(Plots.bbox), Float64, Float64, Float64, Float64}) + precompile(Tuple{typeof(Plots.bbox), Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}) + precompile(Tuple{typeof(Plots.bbox_to_pcts), Measures.BoundingBox{Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}, Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}}, Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}, Bool}) + precompile(Tuple{typeof(Plots.bbox_to_pcts), Measures.BoundingBox{Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}, Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}}, Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}) precompile(Tuple{typeof(Plots.bottom), Measures.BoundingBox{Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}, Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}}}) + precompile(Tuple{typeof(Plots.bottom), Measures.BoundingBox{Tuple{Measures.Length{:w, Float64}, Measures.Length{:h, Float64}}, Tuple{Measures.Length{:w, Float64}, Measures.Length{:h, Float64}}}}) precompile(Tuple{typeof(Plots.bottompad), Plots.Subplot{Plots.GRBackend}}) - precompile(Tuple{typeof(Plots.build_layout), Plots.Attr}) + precompile(Tuple{typeof(Plots.bottompad), Plots.Subplot{Plots.PlotlyBackend}}) precompile(Tuple{typeof(Plots.build_layout), Plots.Attr}) precompile(Tuple{typeof(Plots.build_layout), Plots.GridLayout, Int64, Array{Plots.Plot{T} where T<:RecipesBase.AbstractBackend, 1}}) - precompile(Tuple{typeof(Plots.build_layout), Plots.GridLayout, Int64, Array{Plots.Plot{T} where T<:RecipesBase.AbstractBackend, 1}}) - precompile(Tuple{typeof(Plots.build_layout), Plots.GridLayout, Int64}) precompile(Tuple{typeof(Plots.build_layout), Plots.GridLayout, Int64}) precompile(Tuple{typeof(Plots.calc_num_subplots), Plots.EmptyLayout}) precompile(Tuple{typeof(Plots.calc_num_subplots), Plots.GridLayout}) precompile(Tuple{typeof(Plots.color_or_nothing!), Plots.Attr, Symbol}) - precompile(Tuple{typeof(Plots.color_or_nothing!), Plots.Attr, Symbol}) precompile(Tuple{typeof(Plots.colorbar_style), Plots.Series}) precompile(Tuple{typeof(Plots.compute_gridsize), Int64, Int64, Int64}) - precompile(Tuple{typeof(Plots.compute_xyz), Array{Float64, 1}, Array{Float64, 1}, Array{Float64, 1}}) + precompile(Tuple{typeof(Plots.compute_xyz), Array{Float64, 1}, Array{Float64, 1}, Base.UnitRange{Int64}}) precompile(Tuple{typeof(Plots.compute_xyz), Array{Float64, 1}, Array{Float64, 1}, Nothing}) - precompile(Tuple{typeof(Plots.compute_xyz), Array{Float64, 1}, Array{Float64, 1}, Plots.Surface{Array{Float64, 2}}}) - precompile(Tuple{typeof(Plots.compute_xyz), Array{Float64, 1}, typeof(identity), Nothing}) precompile(Tuple{typeof(Plots.compute_xyz), Array{Float64, 1}, typeof(identity), Nothing}) precompile(Tuple{typeof(Plots.compute_xyz), Array{String, 1}, Array{Float64, 1}, Nothing}) precompile(Tuple{typeof(Plots.compute_xyz), Array{String, 1}, Array{String, 1}, Plots.Surface{Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots.compute_xyz), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}, Nothing}) + precompile(Tuple{typeof(Plots.compute_xyz), 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.compute_xyz), Base.StepRange{Int64, Int64}, Array{Float64, 1}, Nothing}) precompile(Tuple{typeof(Plots.compute_xyz), Nothing, Array{Float64, 1}, Nothing}) precompile(Tuple{typeof(Plots.compute_xyz), Nothing, Array{Union{Base.Missing, Float64}, 1}, Nothing}) + precompile(Tuple{typeof(Plots.compute_xyz), Nothing, Base.UnitRange{Int64}, Nothing}) precompile(Tuple{typeof(Plots.compute_xyz), Nothing, Nothing, Nothing}) + precompile(Tuple{typeof(Plots.concatenate_fillrange), Base.UnitRange{Int64}, Tuple{Array{Float64, 1}, Array{Float64, 1}}}) precompile(Tuple{typeof(Plots.contour), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Int}) precompile(Tuple{typeof(Plots.contour_levels), Plots.Series, Tuple{Float64, Float64}}) precompile(Tuple{typeof(Plots.convertLegendValue), Bool}) @@ -366,16 +413,13 @@ function _precompile_() precompile(Tuple{typeof(Plots.convertToAnyVector), Array{Array{T, 1} where T, 1}, Base.Dict{Symbol, Any}}) precompile(Tuple{typeof(Plots.convertToAnyVector), Array{Float64, 2}, Base.Dict{Symbol, Any}}) precompile(Tuple{typeof(Plots.convertToAnyVector), Array{Function, 1}, Base.Dict{Symbol, Any}}) - precompile(Tuple{typeof(Plots.convertToAnyVector), Array{Function, 1}, Base.Dict{Symbol, Any}}) precompile(Tuple{typeof(Plots.convertToAnyVector), Int64, Base.Dict{Symbol, Any}}) precompile(Tuple{typeof(Plots.convert_sci_unicode), String}) - precompile(Tuple{typeof(Plots.convert_to_polar), Array{Float64, 1}, Array{Float64, 1}, Tuple{Int64, Float64}}) - precompile(Tuple{typeof(Plots.create_grid), Expr}) + precompile(Tuple{typeof(Plots.convert_to_polar), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}, Tuple{Int64, Float64}}) + precompile(Tuple{typeof(Plots.copy_series!), Plots.Series, Symbol}) precompile(Tuple{typeof(Plots.create_grid), Expr}) precompile(Tuple{typeof(Plots.create_grid), Symbol}) precompile(Tuple{typeof(Plots.create_grid_curly), Expr}) - precompile(Tuple{typeof(Plots.create_grid_curly), Expr}) - precompile(Tuple{typeof(Plots.create_grid_vcat), Expr}) precompile(Tuple{typeof(Plots.create_grid_vcat), Expr}) precompile(Tuple{typeof(Plots.default), Symbol}) precompile(Tuple{typeof(Plots.default_should_widen), Plots.Axis}) @@ -385,31 +429,22 @@ function _precompile_() precompile(Tuple{typeof(Plots.discrete_value!), Plots.Axis, Char}) precompile(Tuple{typeof(Plots.discrete_value!), Plots.Axis, String}) precompile(Tuple{typeof(Plots.ensure_gradient!), Plots.Attr, Symbol, Symbol}) - precompile(Tuple{typeof(Plots.ensure_gradient!), Plots.Attr, Symbol, Symbol}) - precompile(Tuple{typeof(Plots.ensure_gradient!), Plots.Attr, Symbol, Symbol}) - precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Array{Float64, 1}}) precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Array{Float64, 1}}) precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Array{Int64, 1}}) - precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Array{Int64, 1}}) - precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Base.OneTo{Int64}}) precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Base.OneTo{Int64}}) precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}) - precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}) + precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Base.StepRange{Int64, Int64}}) precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Base.UnitRange{Int64}}) precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Float64}) precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Int64}) - precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Int64}) - precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Plots.Surface{Array{Float64, 2}}}) precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Plots.Surface{Array{Float64, 2}}}) precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Tuple{Float64, Float64}}) - precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Tuple{Float64, Float64}}) precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Subplot{Plots.GRBackend}, Plots.Attr}) - precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Subplot{Plots.GRBackend}, Plots.Attr}) - precompile(Tuple{typeof(Plots.extendSeriesData), Array{Float64, 1}, Float64}) + precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Subplot{Plots.PlotlyBackend}, Plots.Attr}) + precompile(Tuple{typeof(Plots.extend_by_data!), Array{Float64, 1}, Float64}) + precompile(Tuple{typeof(Plots.extend_series_data!), Plots.Series, Float64, Symbol}) precompile(Tuple{typeof(Plots.extractGroupArgs), Array{String, 1}, Array{Float64, 1}}) precompile(Tuple{typeof(Plots.fakedata), Int64, Int64}) - precompile(Tuple{typeof(Plots.fakedata), Int64, Int64}) - precompile(Tuple{typeof(Plots.fg_color), Plots.Attr}) precompile(Tuple{typeof(Plots.fg_color), Plots.Attr}) precompile(Tuple{typeof(Plots.filter_data!), Base.Dict{Symbol, Any}, Array{Int64, 1}}) precompile(Tuple{typeof(Plots.filter_data), Array{Float64, 1}, Array{Int64, 1}}) @@ -420,61 +455,77 @@ function _precompile_() precompile(Tuple{typeof(Plots.font), Symbol, Int}) precompile(Tuple{typeof(Plots.frame), Plots.Animation, Plots.Plot{Plots.GRBackend}}) precompile(Tuple{typeof(Plots.frame), Plots.Animation}) + precompile(Tuple{typeof(Plots.get_aspect_ratio), Plots.Subplot{Plots.GRBackend}}) + precompile(Tuple{typeof(Plots.get_aspect_ratio), Plots.Subplot{Plots.PlotlyBackend}}) precompile(Tuple{typeof(Plots.get_axis), Plots.Subplot{Plots.GRBackend}, Symbol}) - precompile(Tuple{typeof(Plots.get_axis), Plots.Subplot{Plots.GRBackend}, Symbol}) + precompile(Tuple{typeof(Plots.get_axis), Plots.Subplot{Plots.PlotlyBackend}, Symbol}) precompile(Tuple{typeof(Plots.get_clims), Plots.Series}) precompile(Tuple{typeof(Plots.get_clims), Plots.Subplot{Plots.GRBackend}, Plots.Series}) precompile(Tuple{typeof(Plots.get_clims), Plots.Subplot{Plots.GRBackend}}) + precompile(Tuple{typeof(Plots.get_clims), Plots.Subplot{Plots.PlotlyBackend}, Plots.Series}) + precompile(Tuple{typeof(Plots.get_clims), Plots.Subplot{Plots.PlotlyBackend}}) precompile(Tuple{typeof(Plots.get_fillalpha), Plots.Series, Int64}) precompile(Tuple{typeof(Plots.get_fillalpha), Plots.Series}) precompile(Tuple{typeof(Plots.get_fillcolor), Plots.Series, Float64, Float64, Int64}) precompile(Tuple{typeof(Plots.get_fillcolor), Plots.Series, Tuple{Float64, Float64}, Int64}) precompile(Tuple{typeof(Plots.get_fillcolor), Plots.Series, Tuple{Float64, Float64}}) precompile(Tuple{typeof(Plots.get_linealpha), Plots.Series, Int64}) + precompile(Tuple{typeof(Plots.get_linealpha), Plots.Series}) precompile(Tuple{typeof(Plots.get_linecolor), Plots.Series, Float64, Float64, Int64}) precompile(Tuple{typeof(Plots.get_linecolor), Plots.Series, Tuple{Float64, Float64}, Int64}) precompile(Tuple{typeof(Plots.get_linecolor), Plots.Series, Tuple{Float64, Float64}}) precompile(Tuple{typeof(Plots.get_linestyle), Plots.Series, Int64}) + precompile(Tuple{typeof(Plots.get_linestyle), Plots.Series}) precompile(Tuple{typeof(Plots.get_linewidth), Plots.Series, Int64}) + precompile(Tuple{typeof(Plots.get_linewidth), Plots.Series}) precompile(Tuple{typeof(Plots.get_markeralpha), Plots.Series, Int64}) precompile(Tuple{typeof(Plots.get_markercolor), Plots.Series, Float64, Float64, Int64}) precompile(Tuple{typeof(Plots.get_markerstrokealpha), Plots.Series, Int64}) precompile(Tuple{typeof(Plots.get_markerstrokecolor), Plots.Series, Int64}) + precompile(Tuple{typeof(Plots.get_markerstrokewidth), Plots.Series, Int64}) precompile(Tuple{typeof(Plots.get_minor_ticks), Plots.Subplot{Plots.GRBackend}, Plots.Axis, Tuple{Array{Float64, 1}, Array{Any, 1}}}) precompile(Tuple{typeof(Plots.get_minor_ticks), Plots.Subplot{Plots.GRBackend}, Plots.Axis, Tuple{Array{Float64, 1}, Array{String, 1}}}) precompile(Tuple{typeof(Plots.get_series_color), ColorTypes.RGBA{Float64}, Plots.Subplot{Plots.GRBackend}, Int64, Symbol}) + precompile(Tuple{typeof(Plots.get_series_color), ColorTypes.RGBA{Float64}, Plots.Subplot{Plots.PlotlyBackend}, Int64, Symbol}) precompile(Tuple{typeof(Plots.get_series_color), Int64, Plots.Subplot{Plots.GRBackend}, Int64, Symbol}) + precompile(Tuple{typeof(Plots.get_series_color), Int64, Plots.Subplot{Plots.PlotlyBackend}, Int64, Symbol}) precompile(Tuple{typeof(Plots.get_series_color), PlotUtils.ColorGradient, Plots.Subplot{Plots.GRBackend}, Int64, Symbol}) + precompile(Tuple{typeof(Plots.get_series_color), PlotUtils.ColorGradient, Plots.Subplot{Plots.PlotlyBackend}, Int64, Symbol}) precompile(Tuple{typeof(Plots.get_series_color), Symbol, Plots.Subplot{Plots.GRBackend}, Int64, Symbol}) - precompile(Tuple{typeof(Plots.get_series_color), Symbol, Plots.Subplot{Plots.GRBackend}, Int64, Symbol}) + precompile(Tuple{typeof(Plots.get_series_color), Symbol, Plots.Subplot{Plots.PlotlyBackend}, Int64, Symbol}) precompile(Tuple{typeof(Plots.get_subplot), Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}}) + precompile(Tuple{typeof(Plots.get_subplot), Plots.Plot{Plots.PlotlyBackend}, Plots.Subplot{Plots.PlotlyBackend}}) precompile(Tuple{typeof(Plots.get_ticks), Plots.Subplot{Plots.GRBackend}, Plots.Axis}) - precompile(Tuple{typeof(Plots.get_ticks), Plots.Subplot{Plots.GRBackend}, Plots.Axis}) + precompile(Tuple{typeof(Plots.get_ticks), Plots.Subplot{Plots.PlotlyBackend}, Plots.Axis}) precompile(Tuple{typeof(Plots.get_xy), Array{Plots.OHLC{T} where T<:Real, 1}, Base.OneTo{Int64}}) precompile(Tuple{typeof(Plots.get_xy), Plots.OHLC{Float64}, Int64, Float64}) - precompile(Tuple{typeof(Plots.getxy), Plots.Plot{Plots.GRBackend}, Int64}) precompile(Tuple{typeof(Plots.gr_axis_height), Plots.Subplot{Plots.GRBackend}, Plots.Axis}) precompile(Tuple{typeof(Plots.gr_axis_width), Plots.Subplot{Plots.GRBackend}, Plots.Axis}) precompile(Tuple{typeof(Plots.gr_color), ColorTypes.RGBA{Float64}, Type{ColorTypes.RGB{Float64}}}) precompile(Tuple{typeof(Plots.gr_colorbar_colors), Plots.Series, Tuple{Float64, Float64}}) precompile(Tuple{typeof(Plots.gr_contour_levels), Plots.Series, Tuple{Float64, Float64}}) precompile(Tuple{typeof(Plots.gr_display), Plots.Plot{Plots.GRBackend}, String}) - precompile(Tuple{typeof(Plots.gr_display), Plots.Plot{Plots.GRBackend}, String}) precompile(Tuple{typeof(Plots.gr_display), Plots.Subplot{Plots.GRBackend}, Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}, Array{Float64, 1}}) precompile(Tuple{typeof(Plots.gr_draw_colorbar), Plots.GRColorbar, Plots.Subplot{Plots.GRBackend}, Tuple{Float64, Float64}}) - precompile(Tuple{typeof(Plots.gr_draw_marker), Float64, Float64, Int64, Plots.Shape}) - precompile(Tuple{typeof(Plots.gr_draw_marker), Float64, Float64, Int64, Symbol}) - precompile(Tuple{typeof(Plots.gr_draw_marker), Int64, Float64, Float64, Plots.Shape}) - precompile(Tuple{typeof(Plots.gr_draw_marker), Int64, Float64, Float64, Symbol}) - precompile(Tuple{typeof(Plots.gr_draw_marker), Int64, Float64, Int64, Plots.Shape}) - precompile(Tuple{typeof(Plots.gr_draw_marker), Int64, Float64, Int64, Symbol}) + precompile(Tuple{typeof(Plots.gr_draw_marker), Plots.Series, Float64, Float64, Tuple{Float64, Float64}, Int64, Int64, Plots.Shape}) + precompile(Tuple{typeof(Plots.gr_draw_marker), Plots.Series, Float64, Float64, Tuple{Float64, Float64}, Int64, Int64, Symbol}) + precompile(Tuple{typeof(Plots.gr_draw_marker), Plots.Series, Int64, Float64, Tuple{Float64, Float64}, Int64, Float64, Plots.Shape}) + precompile(Tuple{typeof(Plots.gr_draw_marker), Plots.Series, Int64, Float64, Tuple{Float64, Float64}, Int64, Float64, Symbol}) + precompile(Tuple{typeof(Plots.gr_draw_marker), Plots.Series, Int64, Float64, Tuple{Float64, Float64}, Int64, Int64, Plots.Shape}) + precompile(Tuple{typeof(Plots.gr_draw_marker), Plots.Series, Int64, Float64, Tuple{Float64, Float64}, Int64, Int64, Symbol}) + precompile(Tuple{typeof(Plots.gr_draw_marker), Plots.Series, Int64, Int64, Tuple{Float64, Float64}, Int64, Int64, Plots.Shape}) + precompile(Tuple{typeof(Plots.gr_draw_marker), Plots.Series, Int64, Int64, Tuple{Float64, Float64}, Int64, Int64, Symbol}) precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Array{Float64, 1}, Array{Float64, 1}, Tuple{Float64, Float64}, Int64}) precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Array{Float64, 1}, Array{Float64, 1}, Tuple{Float64, Float64}}) precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Array{Int64, 1}, Array{Float64, 1}, Tuple{Float64, Float64}, Int64}) precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Array{Int64, 1}, Array{Float64, 1}, Tuple{Float64, Float64}}) + precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Array{Int64, 1}, Array{Int64, 1}, Tuple{Float64, Float64}, Int64}) + precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Array{Int64, 1}, Array{Int64, 1}, Tuple{Float64, Float64}}) precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Base.OneTo{Int64}, Array{Float64, 1}, Tuple{Float64, Float64}, Array{Float64, 1}}) precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Base.OneTo{Int64}, Array{Float64, 1}, Tuple{Float64, Float64}, Int64}) precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Base.OneTo{Int64}, Array{Float64, 1}, Tuple{Float64, Float64}}) + precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}, Tuple{Float64, Float64}, Int64}) + precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}, Tuple{Float64, Float64}}) precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Float64, Float64, Tuple{Float64, Float64}, Int64}) precompile(Tuple{typeof(Plots.gr_fill_viewport), Array{Float64, 1}, ColorTypes.RGBA{Float64}}) precompile(Tuple{typeof(Plots.gr_get_color), Plots.Series}) @@ -485,10 +536,10 @@ function _precompile_() precompile(Tuple{typeof(Plots.gr_polaraxes), Int64, Float64, Plots.Subplot{Plots.GRBackend}}) precompile(Tuple{typeof(Plots.gr_polyline), Array{Float64, 1}, Array{Float64, 1}, typeof(identity)}) precompile(Tuple{typeof(Plots.gr_polyline), Array{Float64, 1}, Array{Float64, 1}}) + precompile(Tuple{typeof(Plots.gr_set_bordercolor), ColorTypes.RGBA{Float64}}) precompile(Tuple{typeof(Plots.gr_set_fill), ColorTypes.RGBA{Float64}}) precompile(Tuple{typeof(Plots.gr_set_fillcolor), ColorTypes.RGBA{Float64}}) precompile(Tuple{typeof(Plots.gr_set_font), Plots.Font}) - precompile(Tuple{typeof(Plots.gr_set_font), Plots.Font}) precompile(Tuple{typeof(Plots.gr_set_gradient), PlotUtils.ColorGradient}) precompile(Tuple{typeof(Plots.gr_set_gradient), Plots.Series}) precompile(Tuple{typeof(Plots.gr_set_line), Float64, Symbol, ColorTypes.RGBA{Float64}}) @@ -499,101 +550,119 @@ function _precompile_() precompile(Tuple{typeof(Plots.gr_set_textcolor), ColorTypes.RGBA{Float64}}) precompile(Tuple{typeof(Plots.gr_set_transparency), ColorTypes.RGBA{Float64}, Float64}) precompile(Tuple{typeof(Plots.gr_set_transparency), ColorTypes.RGBA{Float64}, Nothing}) + precompile(Tuple{typeof(Plots.gr_set_transparency), Float64}) precompile(Tuple{typeof(Plots.gr_set_viewport_cmap), Plots.Subplot{Plots.GRBackend}}) precompile(Tuple{typeof(Plots.gr_set_viewport_polar)}) precompile(Tuple{typeof(Plots.gr_set_xticks_font), Plots.Subplot{Plots.GRBackend}}) - precompile(Tuple{typeof(Plots.gr_set_xticks_font), Plots.Subplot{Plots.GRBackend}}) - precompile(Tuple{typeof(Plots.gr_set_yticks_font), Plots.Subplot{Plots.GRBackend}}) precompile(Tuple{typeof(Plots.gr_set_yticks_font), Plots.Subplot{Plots.GRBackend}}) precompile(Tuple{typeof(Plots.gr_text), Float64, Float64, String}) precompile(Tuple{typeof(Plots.gr_text_size), String, Int64}) precompile(Tuple{typeof(Plots.gr_text_size), String}) + precompile(Tuple{typeof(Plots.gr_tick_label), Plots.Axis, String}) precompile(Tuple{typeof(Plots.gr_update_colorbar!), Plots.GRColorbar, Plots.Series}) precompile(Tuple{typeof(Plots.gr_viewport_from_bbox), Plots.Subplot{Plots.GRBackend}, Measures.BoundingBox{Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}, Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}}, Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}, Array{Float64, 1}}) precompile(Tuple{typeof(Plots.gr_w3tondc), Float64, Float64, Float64}) precompile(Tuple{typeof(Plots.gui), Plots.Plot{Plots.GRBackend}}) + precompile(Tuple{typeof(Plots.gui), Plots.Plot{Plots.PlotlyBackend}}) + precompile(Tuple{typeof(Plots.guide_padding), Plots.Axis}) precompile(Tuple{typeof(Plots.guidefont), Plots.Axis}) - precompile(Tuple{typeof(Plots.guidefont), Plots.Axis}) - precompile(Tuple{typeof(Plots.handleColors!), Base.Dict{Symbol, Any}, Array{Symbol, 2}, Symbol}) - precompile(Tuple{typeof(Plots.handleColors!), Base.Dict{Symbol, Any}, Array{Symbol, 2}, Symbol}) precompile(Tuple{typeof(Plots.handleColors!), Base.Dict{Symbol, Any}, Array{Symbol, 2}, Symbol}) precompile(Tuple{typeof(Plots.handleColors!), Base.Dict{Symbol, Any}, ColorTypes.RGBA{Float64}, Symbol}) precompile(Tuple{typeof(Plots.handleColors!), Base.Dict{Symbol, Any}, Plots.Shape, Symbol}) precompile(Tuple{typeof(Plots.handleColors!), Base.Dict{Symbol, Any}, Symbol, Symbol}) - precompile(Tuple{typeof(Plots.handleColors!), Base.Dict{Symbol, Any}, Symbol, Symbol}) - precompile(Tuple{typeof(Plots.handleColors!), Base.Dict{Symbol, Any}, Symbol, Symbol}) precompile(Tuple{typeof(Plots.has_attribute_segments), Plots.Series}) precompile(Tuple{typeof(Plots.hascolorbar), Plots.Subplot{Plots.GRBackend}}) + precompile(Tuple{typeof(Plots.hascolorbar), Plots.Subplot{Plots.PlotlyBackend}}) precompile(Tuple{typeof(Plots.hasgrid), Symbol, Symbol}) precompile(Tuple{typeof(Plots.heatmap_edges), Array{Float64, 1}, Symbol, Array{Float64, 1}, Symbol, Tuple{Int64, Int64}}) precompile(Tuple{typeof(Plots.heatmap_edges), Array{Float64, 1}, Symbol, Bool}) precompile(Tuple{typeof(Plots.heatmap_edges), Array{Float64, 1}, Symbol}) precompile(Tuple{typeof(Plots.heatmap_edges), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Symbol, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Symbol, Tuple{Int64, Int64}}) precompile(Tuple{typeof(Plots.heatmap_edges), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Symbol, Bool}) - precompile(Tuple{typeof(Plots.heatmap_edges), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Symbol, Bool}) - precompile(Tuple{typeof(Plots.heatmap_edges), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Symbol}) precompile(Tuple{typeof(Plots.heatmap_edges), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Symbol}) precompile(Tuple{typeof(Plots.ignorenan_extrema), Array{Float64, 1}}) precompile(Tuple{typeof(Plots.ignorenan_extrema), Array{Float64, 2}}) + precompile(Tuple{typeof(Plots.ignorenan_extrema), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}) precompile(Tuple{typeof(Plots.ignorenan_extrema), Base.StepRange{Int64, Int64}}) precompile(Tuple{typeof(Plots.ignorenan_extrema), Plots.Axis}) precompile(Tuple{typeof(Plots.ignorenan_maximum), Base.OneTo{Int64}}) precompile(Tuple{typeof(Plots.ignorenan_minimum), Array{Int64, 1}}) precompile(Tuple{typeof(Plots.ignorenan_minimum), Base.OneTo{Int64}}) precompile(Tuple{typeof(Plots.inline), Plots.Plot{Plots.GRBackend}}) + precompile(Tuple{typeof(Plots.inline), Plots.Plot{Plots.PlotlyBackend}}) + precompile(Tuple{typeof(Plots.intersection_point), Float64, Float64, Float64, Float64, Float64, Float64}) precompile(Tuple{typeof(Plots.is3d), Plots.Attr}) precompile(Tuple{typeof(Plots.is3d), Plots.Subplot{Plots.GRBackend}}) + precompile(Tuple{typeof(Plots.is3d), Plots.Subplot{Plots.PlotlyBackend}}) precompile(Tuple{typeof(Plots.is3d), Symbol}) precompile(Tuple{typeof(Plots.is_2tuple), Int64}) precompile(Tuple{typeof(Plots.is_2tuple), Symbol}) + precompile(Tuple{typeof(Plots.is_2tuple), Tuple{Array{Float64, 1}, Array{Float64, 1}}}) + precompile(Tuple{typeof(Plots.is_2tuple), Tuple{Float64, Float64}}) + precompile(Tuple{typeof(Plots.is_2tuple), Tuple{Int64, Float64}}) + 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_marker_supported), Plots.GRBackend, Symbol}) + precompile(Tuple{typeof(Plots.is_marker_supported), Plots.PlotlyBackend, Symbol}) precompile(Tuple{typeof(Plots.is_marker_supported), Plots.Shape}) - precompile(Tuple{typeof(Plots.is_marker_supported), Symbol}) + precompile(Tuple{typeof(Plots.is_marker_supported), Plots.Stroke}) 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_seriestype_supported), Plots.GRBackend, Symbol}) - precompile(Tuple{typeof(Plots.is_seriestype_supported), 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_uniformly_spaced), Array{Float64, 1}}) precompile(Tuple{typeof(Plots.iscontour), Plots.Series}) precompile(Tuple{typeof(Plots.isijulia)}) precompile(Tuple{typeof(Plots.ispolar), Plots.Series}) precompile(Tuple{typeof(Plots.ispolar), Plots.Subplot{Plots.GRBackend}}) + precompile(Tuple{typeof(Plots.ispolar), Plots.Subplot{Plots.PlotlyBackend}}) precompile(Tuple{typeof(Plots.isvertical), Base.Dict{Symbol, Any}}) precompile(Tuple{typeof(Plots.isvertical), Plots.Attr}) - precompile(Tuple{typeof(Plots.isvertical), Plots.Attr}) - precompile(Tuple{typeof(Plots.iter_segments), Array{Float64, 1}, Array{Float64, 1}, Array{Float64, 1}}) + precompile(Tuple{typeof(Plots.iter_segments), Array{Float64, 1}, Array{Float64, 1}, Int}) + precompile(Tuple{typeof(Plots.iter_segments), Array{Float64, 1}, Array{Float64, 1}}) precompile(Tuple{typeof(Plots.iter_segments), Array{Int64, 1}, Array{Float64, 1}}) precompile(Tuple{typeof(Plots.iter_segments), Base.OneTo{Int64}, Array{Float64, 1}}) + precompile(Tuple{typeof(Plots.iter_segments), Base.OneTo{Int64}, Base.UnitRange{Int64}}) + precompile(Tuple{typeof(Plots.iter_segments), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}) + precompile(Tuple{typeof(Plots.iter_segments), Base.StepRange{Int64, Int64}, Array{Float64, 1}}) precompile(Tuple{typeof(Plots.iter_segments), Base.UnitRange{Int64}, Array{Float64, 1}}) precompile(Tuple{typeof(Plots.iter_segments), Plots.Series}) precompile(Tuple{typeof(Plots.labelfunc), Symbol, Plots.GRBackend}) - precompile(Tuple{typeof(Plots.layout_args), Base.Dict{Symbol, Any}, Int64}) + precompile(Tuple{typeof(Plots.labelfunc), Symbol, Plots.PlotlyBackend}) precompile(Tuple{typeof(Plots.layout_args), Base.Dict{Symbol, Any}, Int64}) precompile(Tuple{typeof(Plots.layout_args), Int64, Int64}) precompile(Tuple{typeof(Plots.layout_args), Int64, Plots.GridLayout}) + precompile(Tuple{typeof(Plots.layout_args), Int64, Tuple{Int64, Int64}}) precompile(Tuple{typeof(Plots.layout_args), Int64}) precompile(Tuple{typeof(Plots.layout_args), Plots.Attr}) precompile(Tuple{typeof(Plots.layout_args), Plots.GridLayout}) + precompile(Tuple{typeof(Plots.left), Measures.BoundingBox{Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}, Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}}}) + precompile(Tuple{typeof(Plots.left), Measures.BoundingBox{Tuple{Measures.Length{:w, Float64}, Measures.Length{:h, Float64}}, Tuple{Measures.Length{:w, Float64}, Measures.Length{:h, Float64}}}}) precompile(Tuple{typeof(Plots.leftpad), Plots.Subplot{Plots.GRBackend}}) + precompile(Tuple{typeof(Plots.leftpad), Plots.Subplot{Plots.PlotlyBackend}}) precompile(Tuple{typeof(Plots.legendfont), Plots.Subplot{Plots.GRBackend}}) + precompile(Tuple{typeof(Plots.legendfont), Plots.Subplot{Plots.PlotlyBackend}}) precompile(Tuple{typeof(Plots.legendtitlefont), Plots.Subplot{Plots.GRBackend}}) precompile(Tuple{typeof(Plots.like_histogram), Symbol}) precompile(Tuple{typeof(Plots.like_surface), Symbol}) precompile(Tuple{typeof(Plots.link_axes!), Array{RecipesBase.AbstractLayout, 1}, Symbol}) - precompile(Tuple{typeof(Plots.link_axes!), Array{RecipesBase.AbstractLayout, 1}, Symbol}) precompile(Tuple{typeof(Plots.link_axes!), Plots.Axis, Plots.Axis}) - precompile(Tuple{typeof(Plots.link_axes!), Plots.Axis, Plots.Axis}) - precompile(Tuple{typeof(Plots.link_axes!), Plots.GridLayout, Symbol}) precompile(Tuple{typeof(Plots.link_axes!), Plots.GridLayout, Symbol}) precompile(Tuple{typeof(Plots.link_axes!), Plots.Subplot{Plots.GRBackend}, Symbol}) + precompile(Tuple{typeof(Plots.link_axes!), Plots.Subplot{Plots.PlotlyBackend}, Symbol}) precompile(Tuple{typeof(Plots.link_subplots), Array{RecipesBase.AbstractLayout, 1}, Symbol}) precompile(Tuple{typeof(Plots.locate_annotation), Plots.Subplot{Plots.GRBackend}, Int64, Float64, Plots.PlotText}) + precompile(Tuple{typeof(Plots.locate_annotation), Plots.Subplot{Plots.PlotlyBackend}, Int64, Float64, Plots.PlotText}) precompile(Tuple{typeof(Plots.make_fillrange_from_ribbon), Base.Dict{Symbol, Any}}) - precompile(Tuple{typeof(Plots.make_fillrange_side), Array{Float64, 1}, Array{Float64, 1}}) - precompile(Tuple{typeof(Plots.make_fillrange_side), Array{Float64, 1}, Int64}) + precompile(Tuple{typeof(Plots.make_fillrange_side), Base.UnitRange{Int64}, Array{Float64, 1}}) + precompile(Tuple{typeof(Plots.make_fillrange_side), Base.UnitRange{Int64}, Base.LinRange{Float64}}) + precompile(Tuple{typeof(Plots.make_fillrange_side), Base.UnitRange{Int64}, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}) + precompile(Tuple{typeof(Plots.make_fillrange_side), Base.UnitRange{Int64}, Int64}) precompile(Tuple{typeof(Plots.make_steps), Array{Float64, 1}, Symbol}) precompile(Tuple{typeof(Plots.make_steps), Array{Int64, 1}, Symbol}) precompile(Tuple{typeof(Plots.make_steps), Base.OneTo{Int64}, Symbol}) @@ -604,58 +673,103 @@ 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.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}) precompile(Tuple{typeof(Plots.pie_labels), Plots.Subplot{Plots.GRBackend}, Plots.Series}) + precompile(Tuple{typeof(Plots.pie_labels), Plots.Subplot{Plots.PlotlyBackend}, Plots.Series}) precompile(Tuple{typeof(Plots.plotarea!), Plots.GridLayout, Measures.BoundingBox{Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}, Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}}}) precompile(Tuple{typeof(Plots.plotarea!), Plots.Subplot{Plots.GRBackend}, Measures.BoundingBox{Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}, Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}}}) + precompile(Tuple{typeof(Plots.plotarea!), Plots.Subplot{Plots.PlotlyBackend}, Measures.BoundingBox{Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}, Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}}}) + precompile(Tuple{typeof(Plots.plotarea), Plots.Subplot{Plots.GRBackend}}) + precompile(Tuple{typeof(Plots.plotarea), Plots.Subplot{Plots.PlotlyBackend}}) + precompile(Tuple{typeof(Plots.plotly_annotation_dict), Float64, Float64, Plots.PlotText}) + precompile(Tuple{typeof(Plots.plotly_apply_aspect_ratio), Plots.Subplot{Plots.PlotlyBackend}, Measures.BoundingBox{Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}, Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}}, Array{Float64, 1}}) + precompile(Tuple{typeof(Plots.plotly_axis), Plots.Plot{Plots.PlotlyBackend}, Plots.Axis, Plots.Subplot{Plots.PlotlyBackend}}) + precompile(Tuple{typeof(Plots.plotly_colorbar_hack), Plots.Series, Base.Dict{Symbol, Any}, Symbol}) + precompile(Tuple{typeof(Plots.plotly_colorscale), PlotUtils.ColorGradient, Nothing}) + precompile(Tuple{typeof(Plots.plotly_data), Array{Float64, 1}}) + precompile(Tuple{typeof(Plots.plotly_data), Array{Int64, 1}}) + precompile(Tuple{typeof(Plots.plotly_data), Array{String, 1}}) + precompile(Tuple{typeof(Plots.plotly_data), Plots.Series, Symbol, Array{Float64, 1}}) + precompile(Tuple{typeof(Plots.plotly_data), Plots.Series, Symbol, Array{Int64, 1}}) + precompile(Tuple{typeof(Plots.plotly_data), Plots.Series, Symbol, Array{String, 1}}) + precompile(Tuple{typeof(Plots.plotly_data), Plots.Series, Symbol, Base.OneTo{Int64}}) + precompile(Tuple{typeof(Plots.plotly_data), Plots.Series, Symbol, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}) + precompile(Tuple{typeof(Plots.plotly_data), Plots.Series, Symbol, Base.StepRange{Int64, Int64}}) + precompile(Tuple{typeof(Plots.plotly_data), Plots.Series, Symbol, Base.UnitRange{Int64}}) + precompile(Tuple{typeof(Plots.plotly_data), Plots.Series, Symbol, Nothing}) + precompile(Tuple{typeof(Plots.plotly_data), Plots.Series, Symbol, Plots.Surface{Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots.plotly_domain), Plots.Subplot{Plots.PlotlyBackend}, Symbol}) + precompile(Tuple{typeof(Plots.plotly_font), Plots.Font, ColorTypes.RGBA{Float64}}) + precompile(Tuple{typeof(Plots.plotly_font), Plots.Font}) + precompile(Tuple{typeof(Plots.plotly_hover!), Base.Dict{Symbol, Any}, Array{Nothing, 1}}) + precompile(Tuple{typeof(Plots.plotly_hover!), Base.Dict{Symbol, Any}, Nothing}) + precompile(Tuple{typeof(Plots.plotly_html_body), Plots.Plot{Plots.PlotlyBackend}, Nothing}) + precompile(Tuple{typeof(Plots.plotly_html_head), Plots.Plot{Plots.PlotlyBackend}}) + precompile(Tuple{typeof(Plots.plotly_layout), Plots.Plot{Plots.PlotlyBackend}}) + precompile(Tuple{typeof(Plots.plotly_legend_pos), Symbol}) + precompile(Tuple{typeof(Plots.plotly_link_indicies), Plots.Plot{Plots.PlotlyBackend}, Plots.Subplot{Plots.PlotlyBackend}}) + precompile(Tuple{typeof(Plots.plotly_native_data), Plots.Axis, Array{Float64, 1}}) + precompile(Tuple{typeof(Plots.plotly_native_data), Plots.Axis, Array{Float64, 2}}) + precompile(Tuple{typeof(Plots.plotly_native_data), Plots.Axis, Array{Int64, 1}}) + precompile(Tuple{typeof(Plots.plotly_native_data), Plots.Axis, Array{String, 1}}) + precompile(Tuple{typeof(Plots.plotly_native_data), Plots.Axis, Base.OneTo{Int64}}) + precompile(Tuple{typeof(Plots.plotly_native_data), Plots.Axis, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}) + precompile(Tuple{typeof(Plots.plotly_native_data), Plots.Axis, Base.StepRange{Int64, Int64}}) + precompile(Tuple{typeof(Plots.plotly_native_data), Plots.Axis, Base.UnitRange{Int64}}) + precompile(Tuple{typeof(Plots.plotly_native_data), Plots.Axis, Plots.Surface{Array{Float64, 2}}}) + precompile(Tuple{typeof(Plots.plotly_polar!), Base.Dict{Symbol, Any}, Plots.Series}) + precompile(Tuple{typeof(Plots.plotly_polaraxis), Plots.Subplot{Plots.PlotlyBackend}, Plots.Axis}) + precompile(Tuple{typeof(Plots.plotly_series), Plots.Plot{Plots.PlotlyBackend}, Plots.Series}) + precompile(Tuple{typeof(Plots.plotly_series), Plots.Plot{Plots.PlotlyBackend}}) + precompile(Tuple{typeof(Plots.plotly_series_segments), Plots.Series, Base.Dict{Symbol, Any}, Array{Float64, 1}, Array{Float64, 1}, Nothing, Tuple{Float64, Float64}}) + precompile(Tuple{typeof(Plots.plotly_series_segments), Plots.Series, Base.Dict{Symbol, Any}, Array{Int64, 1}, Array{Float64, 1}, Nothing, Tuple{Float64, Float64}}) + precompile(Tuple{typeof(Plots.plotly_series_segments), Plots.Series, Base.Dict{Symbol, Any}, Array{Int64, 1}, Array{Int64, 1}, Nothing, Tuple{Float64, Float64}}) + precompile(Tuple{typeof(Plots.plotly_series_segments), Plots.Series, Base.Dict{Symbol, Any}, Base.OneTo{Int64}, Array{Float64, 1}, Nothing, Tuple{Float64, Float64}}) + precompile(Tuple{typeof(Plots.plotly_series_segments), Plots.Series, Base.Dict{Symbol, Any}, Base.OneTo{Int64}, Base.UnitRange{Int64}, Nothing, Tuple{Float64, Float64}}) + precompile(Tuple{typeof(Plots.plotly_series_segments), Plots.Series, Base.Dict{Symbol, Any}, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}, Nothing, Tuple{Float64, Float64}}) + precompile(Tuple{typeof(Plots.plotly_series_segments), Plots.Series, Base.Dict{Symbol, Any}, Base.StepRange{Int64, Int64}, Array{Float64, 1}, Nothing, Tuple{Float64, Float64}}) + precompile(Tuple{typeof(Plots.plotly_series_segments), Plots.Series, Base.Dict{Symbol, Any}, Base.UnitRange{Int64}, Array{Float64, 1}, Nothing, Tuple{Float64, Float64}}) + precompile(Tuple{typeof(Plots.plotly_series_segments), Plots.Series, Base.Dict{Symbol, Any}, Nothing, Nothing, Nothing, Tuple{Float64, Float64}}) + precompile(Tuple{typeof(Plots.plotly_series_shapes), Plots.Plot{Plots.PlotlyBackend}, Plots.Series, Tuple{Float64, Float64}}) + precompile(Tuple{typeof(Plots.plotly_surface_data), Plots.Series, Plots.Surface{Array{Float64, 2}}}) precompile(Tuple{typeof(Plots.png), Plots.Plot{Plots.GRBackend}, String}) precompile(Tuple{typeof(Plots.prepareSeriesData), Array{Float64, 1}}) precompile(Tuple{typeof(Plots.prepareSeriesData), Array{Float64, 2}}) - precompile(Tuple{typeof(Plots.prepareSeriesData), Array{Int32, 1}}) precompile(Tuple{typeof(Plots.prepareSeriesData), Array{Int64, 1}}) + precompile(Tuple{typeof(Plots.prepareSeriesData), Array{Real, 1}}) precompile(Tuple{typeof(Plots.prepareSeriesData), Array{Union{Base.Missing, Int64}, 1}}) precompile(Tuple{typeof(Plots.prepareSeriesData), Array{Union{Base.Missing, Number}, 1}}) - precompile(Tuple{typeof(Plots.prepareSeriesData), Array{Union{Base.Missing, Number}, 1}}) - precompile(Tuple{typeof(Plots.prepareSeriesData), Base.LinRange{Float64}}) - precompile(Tuple{typeof(Plots.prepareSeriesData), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}) - precompile(Tuple{typeof(Plots.prepare_output), Plots.Plot{Plots.GRBackend}}) precompile(Tuple{typeof(Plots.prepare_output), Plots.Plot{Plots.GRBackend}}) + precompile(Tuple{typeof(Plots.prepare_output), Plots.Plot{Plots.PlotlyBackend}}) precompile(Tuple{typeof(Plots.preprocessArgs!), Base.Dict{Symbol, Any}}) - precompile(Tuple{typeof(Plots.preprocessArgs!), Base.Dict{Symbol, Any}}) - precompile(Tuple{typeof(Plots.preprocessArgs!), Plots.Attr}) precompile(Tuple{typeof(Plots.preprocessArgs!), Plots.Attr}) precompile(Tuple{typeof(Plots.processFillArg), Base.Dict{Symbol, Any}, Bool}) - precompile(Tuple{typeof(Plots.processFillArg), Base.Dict{Symbol, Any}, Float64}) precompile(Tuple{typeof(Plots.processFillArg), Base.Dict{Symbol, Any}, Int64}) precompile(Tuple{typeof(Plots.processFillArg), Base.Dict{Symbol, Any}, Symbol}) - precompile(Tuple{typeof(Plots.processFillArg), Base.Dict{Symbol, Any}, Symbol}) - precompile(Tuple{typeof(Plots.processFillArg), Base.Dict{Symbol, Any}, 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}) precompile(Tuple{typeof(Plots.processGridArg!), Base.Dict{Symbol, Any}, Symbol, Symbol}) precompile(Tuple{typeof(Plots.processGridArg!), Plots.Attr, Bool, Symbol}) precompile(Tuple{typeof(Plots.processLineArg), Base.Dict{Symbol, Any}, Array{Symbol, 2}}) - precompile(Tuple{typeof(Plots.processLineArg), Base.Dict{Symbol, Any}, Array{Symbol, 2}}) precompile(Tuple{typeof(Plots.processLineArg), Base.Dict{Symbol, Any}, Float64}) precompile(Tuple{typeof(Plots.processLineArg), Base.Dict{Symbol, Any}, Int64}) precompile(Tuple{typeof(Plots.processLineArg), Base.Dict{Symbol, Any}, Symbol}) - precompile(Tuple{typeof(Plots.processLineArg), Base.Dict{Symbol, Any}, Symbol}) - precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, Array{Symbol, 2}}) precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, Array{Symbol, 2}}) precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, Bool}) precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, ColorTypes.RGBA{Float64}}) precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, Float64}) - precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, Float64}) - precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, Int64}) precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, Int64}) 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.processMarkerArg), Base.Dict{Symbol, Any}, 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}) + precompile(Tuple{typeof(Plots.process_annotation), Plots.Subplot{Plots.PlotlyBackend}, Int64, Float64, Plots.PlotText}) precompile(Tuple{typeof(Plots.process_axis_arg!), Base.Dict{Symbol, Any}, Base.StepRange{Int64, Int64}, Symbol}) precompile(Tuple{typeof(Plots.process_axis_arg!), Base.Dict{Symbol, Any}, String, Symbol}) precompile(Tuple{typeof(Plots.process_axis_arg!), Base.Dict{Symbol, Any}, Symbol, Symbol}) @@ -673,24 +787,21 @@ function _precompile_() precompile(Tuple{typeof(Plots.replaceAliases!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Symbol}}) precompile(Tuple{typeof(Plots.replaceAliases!), Plots.Attr, Base.Dict{Symbol, Symbol}}) precompile(Tuple{typeof(Plots.reset_axis_defaults_byletter!)}) - precompile(Tuple{typeof(Plots.reset_extrema!), Plots.Subplot{Plots.GRBackend}}) precompile(Tuple{typeof(Plots.right), Measures.BoundingBox{Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}, Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}}}) precompile(Tuple{typeof(Plots.rightpad), Plots.Subplot{Plots.GRBackend}}) + precompile(Tuple{typeof(Plots.rightpad), Plots.Subplot{Plots.PlotlyBackend}}) precompile(Tuple{typeof(Plots.rowsize), Expr}) precompile(Tuple{typeof(Plots.rowsize), Symbol}) precompile(Tuple{typeof(Plots.series_annotations), Array{Any, 1}}) 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.setxy!), Plots.Plot{Plots.GRBackend}, Tuple{Array{Float64, 1}, Array{Float64, 1}}, Int64}) precompile(Tuple{typeof(Plots.shape_data), Plots.Series, Int64}) precompile(Tuple{typeof(Plots.should_add_to_legend), Plots.Series}) precompile(Tuple{typeof(Plots.showaxis), Symbol, Symbol}) - precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, Int64, Bool}) + precompile(Tuple{typeof(Plots.shrink_by), Float64, Float64, Float64}) precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, Int64, Bool}) precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Plots.Attr, Symbol, Int64, Bool}) - precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Plots.Attr, Symbol, Int64, Bool}) - precompile(Tuple{typeof(Plots.slice_arg!), Plots.Attr, Plots.Attr, Symbol, Int64, Bool}) precompile(Tuple{typeof(Plots.slice_arg!), Plots.Attr, Plots.Attr, Symbol, Int64, Bool}) precompile(Tuple{typeof(Plots.slice_arg), Array{ColorTypes.RGBA{Float64}, 2}, Int64}) precompile(Tuple{typeof(Plots.slice_arg), Array{Measures.Length{:mm, Float64}, 2}, Int64}) @@ -706,69 +817,74 @@ function _precompile_() precompile(Tuple{typeof(Plots.slice_arg), Nothing, Int64}) precompile(Tuple{typeof(Plots.slice_arg), String, Int64}) precompile(Tuple{typeof(Plots.slice_arg), Symbol, Int64}) + precompile(Tuple{typeof(Plots.slice_arg), Tuple{Float64, Float64}, Int64}) precompile(Tuple{typeof(Plots.slice_arg), Tuple{Int64, Float64}, Int64}) precompile(Tuple{typeof(Plots.slice_arg), Tuple{Int64, Int64}, Int64}) precompile(Tuple{typeof(Plots.splittable_kw), Symbol, Array{Int64, 1}, Int64}) precompile(Tuple{typeof(Plots.splittable_kw), Symbol, Array{String, 1}, Int64}) precompile(Tuple{typeof(Plots.splittable_kw), Symbol, Array{Symbol, 2}, Int64}) - precompile(Tuple{typeof(Plots.splittable_kw), Symbol, ColorTypes.RGB{Float64}, Int64}) - precompile(Tuple{typeof(Plots.splittable_kw), Symbol, Float64, Int64}) - precompile(Tuple{typeof(Plots.splittable_kw), Symbol, Int64, Int64}) precompile(Tuple{typeof(Plots.splittable_kw), Symbol, Plots.GridLayout, Int64}) precompile(Tuple{typeof(Plots.splittable_kw), Symbol, Plots.Plot{Plots.GRBackend}, Int64}) + precompile(Tuple{typeof(Plots.splittable_kw), Symbol, Plots.Plot{Plots.PlotlyBackend}, Int64}) precompile(Tuple{typeof(Plots.splittable_kw), Symbol, String, Int64}) precompile(Tuple{typeof(Plots.splittable_kw), Symbol, Symbol, Int64}) precompile(Tuple{typeof(Plots.straightline_data), Plots.Series, Int64}) precompile(Tuple{typeof(Plots.straightline_data), Tuple{Int64, Int64}, Tuple{Float64, Float64}, Array{Float64, 1}, Array{Float64, 1}, Int64}) - precompile(Tuple{typeof(Plots.stroke), Int64, Int64}) precompile(Tuple{typeof(Plots.stroke), Int64, Int}) precompile(Tuple{typeof(Plots.supported_markers), Plots.GRBackend}) + precompile(Tuple{typeof(Plots.supported_markers), Plots.PlotlyBackend}) precompile(Tuple{typeof(Plots.supported_markers)}) precompile(Tuple{typeof(Plots.supported_styles), Plots.GRBackend}) + precompile(Tuple{typeof(Plots.supported_styles), Plots.PlotlyBackend}) precompile(Tuple{typeof(Plots.supported_styles)}) + precompile(Tuple{typeof(Plots.test_examples), Symbol}) precompile(Tuple{typeof(Plots.text), String, Int64, Symbol, Symbol}) + precompile(Tuple{typeof(Plots.text), String, Plots.Font}) precompile(Tuple{typeof(Plots.text), String, Symbol, Int64, Int}) precompile(Tuple{typeof(Plots.text), String, Symbol}) + precompile(Tuple{typeof(Plots.text_size), Int64, Int64, Int64}) + precompile(Tuple{typeof(Plots.tick_padding), Plots.Subplot{Plots.PlotlyBackend}, Plots.Axis}) precompile(Tuple{typeof(Plots.tickfont), Plots.Axis}) - precompile(Tuple{typeof(Plots.tickfont), Plots.Axis}) + precompile(Tuple{typeof(Plots.ticksType), Tuple{Array{Float64, 1}, Array{Any, 1}}}) + precompile(Tuple{typeof(Plots.ticksType), Tuple{Array{Float64, 1}, Array{String, 1}}}) precompile(Tuple{typeof(Plots.title!), String}) + precompile(Tuple{typeof(Plots.title_padding), Plots.Subplot{Plots.PlotlyBackend}}) precompile(Tuple{typeof(Plots.titlefont), Plots.Subplot{Plots.GRBackend}}) - precompile(Tuple{typeof(Plots.titlefont), Plots.Subplot{Plots.GRBackend}}) + precompile(Tuple{typeof(Plots.titlefont), Plots.Subplot{Plots.PlotlyBackend}}) + precompile(Tuple{typeof(Plots.top), Measures.BoundingBox{Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}, Tuple{Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}}}) precompile(Tuple{typeof(Plots.toppad), Plots.Subplot{Plots.GRBackend}}) - precompile(Tuple{typeof(Plots.tovec), Array{Float64, 1}}) + precompile(Tuple{typeof(Plots.toppad), Plots.Subplot{Plots.PlotlyBackend}}) precompile(Tuple{typeof(Plots.transpose_z), Plots.Series, Array{Float64, 2}, Bool}) precompile(Tuple{typeof(Plots.trueOrAllTrue), typeof(Plots.is3d), Symbol}) precompile(Tuple{typeof(Plots.trueOrAllTrue), typeof(identity), Array{Symbol, 2}}) precompile(Tuple{typeof(Plots.unzip), Array{Tuple{Float64, Float64, Float64}, 1}}) precompile(Tuple{typeof(Plots.update_child_bboxes!), Plots.GridLayout, Array{Measures.Length{:mm, Float64}, 1}}) - precompile(Tuple{typeof(Plots.update_child_bboxes!), Plots.GridLayout, Array{Measures.Length{:mm, Float64}, 1}}) - precompile(Tuple{typeof(Plots.update_child_bboxes!), Plots.GridLayout}) precompile(Tuple{typeof(Plots.update_child_bboxes!), Plots.GridLayout}) precompile(Tuple{typeof(Plots.update_child_bboxes!), Plots.Subplot{Plots.GRBackend}, Array{Measures.Length{:mm, Float64}, 1}}) + precompile(Tuple{typeof(Plots.update_child_bboxes!), Plots.Subplot{Plots.PlotlyBackend}, Array{Measures.Length{:mm, Float64}, 1}}) precompile(Tuple{typeof(Plots.update_inset_bboxes!), Plots.Plot{Plots.GRBackend}}) - precompile(Tuple{typeof(Plots.update_inset_bboxes!), Plots.Plot{Plots.GRBackend}}) + precompile(Tuple{typeof(Plots.update_inset_bboxes!), Plots.Plot{Plots.PlotlyBackend}}) precompile(Tuple{typeof(Plots.vline!), Array{Int64, 1}}) precompile(Tuple{typeof(Plots.wand_edges), Array{Float64, 1}}) precompile(Tuple{typeof(Plots.warnOnUnsupported), Plots.GRBackend, Plots.Attr}) - precompile(Tuple{typeof(Plots.warnOnUnsupported), Plots.GRBackend, Plots.Attr}) - precompile(Tuple{typeof(Plots.warnOnUnsupported_args), Plots.GRBackend, Plots.Attr}) + precompile(Tuple{typeof(Plots.warnOnUnsupported), Plots.PlotlyBackend, Plots.Attr}) precompile(Tuple{typeof(Plots.warnOnUnsupported_args), Plots.GRBackend, Plots.Attr}) + 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.GRBackend, Base.Dict{Symbol, Any}}) + precompile(Tuple{typeof(Plots.warnOnUnsupported_scales), Plots.PlotlyBackend, Base.Dict{Symbol, Any}}) precompile(Tuple{typeof(Plots.widen), Float64, Float64, Symbol}) 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}}}) precompile(Tuple{typeof(Plots.wraptuple), Bool}) precompile(Tuple{typeof(Plots.wraptuple), Float64}) precompile(Tuple{typeof(Plots.wraptuple), Int64}) precompile(Tuple{typeof(Plots.wraptuple), Nothing}) precompile(Tuple{typeof(Plots.wraptuple), Plots.SeriesAnnotations}) - precompile(Tuple{typeof(Plots.wraptuple), Tuple{Array{Float64, 1}, Array{Float64, 1}}}) precompile(Tuple{typeof(Plots.wraptuple), Tuple{Array{Symbol, 2}, Int64, Float64, Plots.Stroke}}) precompile(Tuple{typeof(Plots.wraptuple), Tuple{Array{Symbol, 2}, Int64}}) - precompile(Tuple{typeof(Plots.wraptuple), Tuple{Float64, Array{Symbol, 2}, Int64}}) - precompile(Tuple{typeof(Plots.wraptuple), Tuple{Float64, Symbol}}) + precompile(Tuple{typeof(Plots.wraptuple), Tuple{Base.LinRange{Float64}, Base.LinRange{Float64}}}) 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}}) @@ -780,9 +896,18 @@ function _precompile_() precompile(Tuple{typeof(Plots.wraptuple), Tuple{String, Tuple{Int64, Int64}, Base.StepRange{Int64, Int64}, Symbol}}) precompile(Tuple{typeof(Plots.wraptuple), Tuple{Symbol, Float64, Plots.Stroke}}) precompile(Tuple{typeof(Plots.wraptuple), Tuple{Symbol, Int64}}) + precompile(Tuple{typeof(Plots.wraptuple), Tuple{Symbol, Symbol, Int64, Symbol, Float64}}) precompile(Tuple{typeof(Plots.wraptuple), Tuple{Symbol, Symbol, Symbol, Int64, Float64}}) precompile(Tuple{typeof(Plots.wraptuple), Tuple{}}) + precompile(Tuple{typeof(Plots.write_temp_html), Plots.Plot{Plots.PlotlyBackend}}) + precompile(Tuple{typeof(Plots.xgrid!), Plots.Plot{Plots.GRBackend}, Symbol, Int}) + precompile(Tuple{typeof(Plots.xgrid!), Plots.Plot{Plots.PlotlyBackend}, Symbol, Int}) + precompile(Tuple{typeof(Plots.xlims), Int64}) precompile(Tuple{typeof(Plots.xlims), Plots.Subplot{Plots.GRBackend}}) + precompile(Tuple{typeof(Plots.xlims), Plots.Subplot{Plots.PlotlyBackend}}) + precompile(Tuple{typeof(Plots.xy_mm_to_pcts), Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}, Measures.Length{:mm, Float64}}) precompile(Tuple{typeof(Plots.yaxis!), String, Symbol}) + precompile(Tuple{typeof(Plots.ylims), Int64}) precompile(Tuple{typeof(Plots.ylims), Plots.Subplot{Plots.GRBackend}}) + precompile(Tuple{typeof(Plots.ylims), Plots.Subplot{Plots.PlotlyBackend}}) end From 5194e49b4cbb371716ba41c9efa814a0f43d0296 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Sun, 22 Mar 2020 18:31:08 +0100 Subject: [PATCH 34/77] test on 1.4 and update version --- .gitignore | 1 + .travis.yml | 2 +- Project.toml | 2 +- appveyor.yml | 4 ++-- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 0c89a967..6e5cdbe6 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ deps/build.log deps/deps.jl Manifest.toml dev/ +test/tmpplotsave.hdf5 diff --git a/.travis.yml b/.travis.yml index b8ae53eb..113a0972 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ os: # - osx julia: - 1 - - 1.3 + - 1.4 - nightly matrix: diff --git a/Project.toml b/Project.toml index f03c1ed2..26d82018 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "Plots" uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" author = ["Tom Breloff (@tbreloff)"] -version = "0.29.8" +version = "0.29.9" [deps] Base64 = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" diff --git a/appveyor.yml b/appveyor.yml index 890f4960..61883cf7 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,7 +2,7 @@ environment: matrix: # - julia_version: 0.7 - julia_version: 1 - - julia_version: 1.3 + - julia_version: 1.4 - julia_version: nightly platform: @@ -36,7 +36,7 @@ build_script: - C:\julia\bin\julia --project=C:\projects\plots-jl -e "using Pkg; Pkg.pin(PackageSpec(name="""FixedPointNumbers""", version="""0.7"""))" - echo "%JL_BUILD_SCRIPT%" - C:\julia\bin\julia -e "%JL_BUILD_SCRIPT%" - + test_script: - echo "%JL_TEST_SCRIPT%" - C:\julia\bin\julia -e "%JL_TEST_SCRIPT%" From b0548ffc14342136f1828f3db0239d60bc5d0d18 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Mon, 23 Mar 2020 23:12:13 +0100 Subject: [PATCH 35/77] make type recipe aware of current axis --- src/series.jl | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/series.jl b/src/series.jl index 3a79d478..32982d13 100644 --- a/src/series.jl +++ b/src/series.jl @@ -175,9 +175,9 @@ end @recipe f(::Type{V}, x, y, z) where {V<:Val} = error("The backend must not support the series type $V, and there isn't a series recipe defined.") function _apply_type_recipe(plotattributes, v, letter) - _handle_axis_args!(plotattributes) + _preprocess_axis_args!(plotattributes, letter) rdvec = RecipesBase.apply_recipe(plotattributes, typeof(v), v) - _handle_axis_args!(plotattributes, letter) + _postprocess_axis_args!(plotattributes, letter) return rdvec[1].args[1] end @@ -185,7 +185,7 @@ end # This sort of recipe should return a pair of functions... one to convert to number, # and one to format tick values. function _apply_type_recipe(plotattributes, v::AbstractArray, letter) - _handle_axis_args!(plotattributes) + _preprocess_axis_args!(plotattributes, letter) # First we try to apply an array type recipe. w = RecipesBase.apply_recipe(plotattributes, typeof(v), v)[1].args[1] # If the type did not change try it element-wise @@ -193,7 +193,7 @@ function _apply_type_recipe(plotattributes, v::AbstractArray, letter) isempty(skipmissing(v)) && return Float64[] x = first(skipmissing(v)) args = RecipesBase.apply_recipe(plotattributes, typeof(x), x)[1].args - _handle_axis_args!(plotattributes, letter) + _postprocess_axis_args!(plotattributes, letter) if length(args) == 2 && all(arg -> arg isa Function, args) numfunc, formatter = args return Formatted(map(numfunc, v), formatter) @@ -201,7 +201,7 @@ function _apply_type_recipe(plotattributes, v::AbstractArray, letter) return v end end - _handle_axis_args!(plotattributes, letter) + _postprocess_axis_args!(plotattributes, letter) return w end @@ -225,7 +225,8 @@ end _apply_type_recipe(plotattributes, v::AbstractArray{T}, letter) where {T<:Union{Integer,AbstractFloat}} = v # axis args in type recipes should only be applied to the current axis -function _handle_axis_args!(plotattributes, letter) +function _postprocess_axis_args!(plotattributes, letter) + pop!(plotattributes, :letter) if letter in (:x, :y, :z) replaceAliases!(plotattributes, _keyAliases) for (k, v) in plotattributes @@ -239,13 +240,14 @@ function _handle_axis_args!(plotattributes, letter) end # axis args before type recipes should still be mapped to all axes -function _handle_axis_args!(plotattributes) +function _preprocess_axis_args!(plotattributes, letter) replaceAliases!(plotattributes, _keyAliases) + plotattributes[:letter] = letter for (k, v) in plotattributes if haskey(_axis_defaults, k) pop!(plotattributes, k) - for letter in (:x, :y, :z) - lk = Symbol(letter, k) + for l in (:x, :y, :z) + lk = Symbol(l, k) haskey(plotattributes, lk) || (plotattributes[lk] = v) end end From 8efd0f00c4d761031ae168ab63016ae5d22863fa Mon Sep 17 00:00:00 2001 From: Simon Christ Date: Wed, 25 Mar 2020 10:45:46 +0100 Subject: [PATCH 36/77] fix pin --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 113a0972..0ca9ae82 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,4 +35,4 @@ notifications: script: - if [[ -a .git/shallow ]]; then git fetch --unshallow; fi - if [[ `uname` = "Linux" ]]; then TESTCMD="xvfb-run julia"; else TESTCMD="julia"; fi - - $TESTCMD -e 'using Pkg; Pkg.pin(PackageSpec(name="FixedPointNumbers", version="0.7")); Pkg.build(); Pkg.test(coverage=true)' + - $TESTCMD -e 'using Pkg; Pkg.resolve(); Pkg.pin(PackageSpec(name="FixedPointNumbers", version="0.7")); Pkg.build(); Pkg.test(coverage=true)' From 17db6c01b4fdb763ca58d902ace9ffe97b51d03c Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Wed, 25 Mar 2020 12:51:49 +0100 Subject: [PATCH 37/77] keep no-letter version of `_preprocess_axis_args!` --- src/series.jl | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/series.jl b/src/series.jl index 32982d13..ac5f9213 100644 --- a/src/series.jl +++ b/src/series.jl @@ -224,6 +224,24 @@ end # don't do anything for ints or floats _apply_type_recipe(plotattributes, v::AbstractArray{T}, letter) where {T<:Union{Integer,AbstractFloat}} = v +# axis args before type recipes should still be mapped to all axes +function _preprocess_axis_args!(plotattributes) + replaceAliases!(plotattributes, _keyAliases) + for (k, v) in plotattributes + if haskey(_axis_defaults, k) + pop!(plotattributes, k) + for l in (:x, :y, :z) + lk = Symbol(l, k) + haskey(plotattributes, lk) || (plotattributes[lk] = v) + end + end + end +end +function _preprocess_axis_args!(plotattributes, letter) + plotattributes[:letter] = letter + _preprocess_axis_args!(plotattributes) +end + # axis args in type recipes should only be applied to the current axis function _postprocess_axis_args!(plotattributes, letter) pop!(plotattributes, :letter) @@ -239,21 +257,6 @@ function _postprocess_axis_args!(plotattributes, letter) end end -# axis args before type recipes should still be mapped to all axes -function _preprocess_axis_args!(plotattributes, letter) - replaceAliases!(plotattributes, _keyAliases) - plotattributes[:letter] = letter - for (k, v) in plotattributes - if haskey(_axis_defaults, k) - pop!(plotattributes, k) - for l in (:x, :y, :z) - lk = Symbol(l, k) - haskey(plotattributes, lk) || (plotattributes[lk] = v) - end - end - end -end - # handle "type recipes" by converting inputs, and then either re-calling or slicing @recipe function f(x, y, z) did_replace = false From dd3216489b3e7e30df14cfb0409fbf7485a2d2f4 Mon Sep 17 00:00:00 2001 From: Simon Christ Date: Wed, 25 Mar 2020 14:48:57 +0100 Subject: [PATCH 38/77] resolve conditionally --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 0ca9ae82..e380db24 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,4 +35,4 @@ notifications: script: - if [[ -a .git/shallow ]]; then git fetch --unshallow; fi - if [[ `uname` = "Linux" ]]; then TESTCMD="xvfb-run julia"; else TESTCMD="julia"; fi - - $TESTCMD -e 'using Pkg; Pkg.resolve(); Pkg.pin(PackageSpec(name="FixedPointNumbers", version="0.7")); Pkg.build(); Pkg.test(coverage=true)' + - $TESTCMD -e 'using Pkg; VERSION == v"1.4" ? Pkg.resolve() : nothing; Pkg.pin(PackageSpec(name="FixedPointNumbers", version="0.7")); Pkg.build(); Pkg.test(coverage=true)' From 53183529297e9aa835bd4f4dce9cdcfb1327af70 Mon Sep 17 00:00:00 2001 From: Simon Christ Date: Wed, 25 Mar 2020 14:50:42 +0100 Subject: [PATCH 39/77] Update appveyor.yml --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 61883cf7..c67bb234 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -33,7 +33,7 @@ install: - ps: iex ((new-object net.webclient).DownloadString("https://raw.githubusercontent.com/JuliaCI/Appveyor.jl/version-1/bin/install.ps1")) build_script: - - C:\julia\bin\julia --project=C:\projects\plots-jl -e "using Pkg; Pkg.pin(PackageSpec(name="""FixedPointNumbers""", version="""0.7"""))" + - C:\julia\bin\julia --project=C:\projects\plots-jl -e "using Pkg; VERSION == v"""1.4""" ? Pkg.resolve() : nothing; Pkg.pin(PackageSpec(name="""FixedPointNumbers""", version="""0.7"""))" - echo "%JL_BUILD_SCRIPT%" - C:\julia\bin\julia -e "%JL_BUILD_SCRIPT%" From c684213106e5ec43cd6626f63c73185d09185154 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Wed, 25 Mar 2020 15:04:39 +0100 Subject: [PATCH 40/77] fix `AbstractArray{<:Missing}` --- src/series.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/series.jl b/src/series.jl index ac5f9213..afebde8e 100644 --- a/src/series.jl +++ b/src/series.jl @@ -20,6 +20,7 @@ function prepareSeriesData(a::AbstractArray{<:MaybeNumber}) f = isimmutable(a) ? replace : replace! a = f(x -> ismissing(x) || isinf(x) ? NaN : x, map(float, a)) end +prepareSeriesData(a::AbstractArray{<:Missing}) = fill(NaN, axes(a)) prepareSeriesData(a::AbstractArray{<:MaybeString}) = replace(x -> ismissing(x) ? "" : x, a) prepareSeriesData(s::Surface{<:AMat{<:MaybeNumber}}) = Surface(prepareSeriesData(s.surf)) prepareSeriesData(s::Surface) = s # non-numeric Surface, such as an image @@ -222,7 +223,7 @@ end # end # don't do anything for ints or floats -_apply_type_recipe(plotattributes, v::AbstractArray{T}, letter) where {T<:Union{Integer,AbstractFloat}} = v +_apply_type_recipe(plotattributes, v::AbstractArray{<:DataPoint}, letter) = v # axis args before type recipes should still be mapped to all axes function _preprocess_axis_args!(plotattributes) From d9a48ac7de4e67e13dfb74a1dd26c7b2eef200fa Mon Sep 17 00:00:00 2001 From: Simon Christ Date: Wed, 25 Mar 2020 16:36:04 +0100 Subject: [PATCH 41/77] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index e380db24..aa1f8bfe 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,4 +35,4 @@ notifications: script: - if [[ -a .git/shallow ]]; then git fetch --unshallow; fi - if [[ `uname` = "Linux" ]]; then TESTCMD="xvfb-run julia"; else TESTCMD="julia"; fi - - $TESTCMD -e 'using Pkg; VERSION == v"1.4" ? Pkg.resolve() : nothing; Pkg.pin(PackageSpec(name="FixedPointNumbers", version="0.7")); Pkg.build(); Pkg.test(coverage=true)' + - $TESTCMD -e 'using Pkg; if VERSION == v"1.4"; Pkg.resolve(); end; Pkg.pin(PackageSpec(name="FixedPointNumbers", version="0.7")); Pkg.build(); Pkg.test(coverage=true)' From c37829eafb8d49a92e95d4a32a9c29c9386e07f8 Mon Sep 17 00:00:00 2001 From: Simon Christ Date: Wed, 25 Mar 2020 16:55:53 +0100 Subject: [PATCH 42/77] Update appveyor.yml --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index c67bb234..7742efb2 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -33,7 +33,7 @@ install: - ps: iex ((new-object net.webclient).DownloadString("https://raw.githubusercontent.com/JuliaCI/Appveyor.jl/version-1/bin/install.ps1")) build_script: - - C:\julia\bin\julia --project=C:\projects\plots-jl -e "using Pkg; VERSION == v"""1.4""" ? Pkg.resolve() : nothing; Pkg.pin(PackageSpec(name="""FixedPointNumbers""", version="""0.7"""))" + - C:\julia\bin\julia --project=C:\projects\plots-jl -e "using Pkg; if VERSION == v"""1.4"""; Pkg.resolve(); end; Pkg.pin(PackageSpec(name="""FixedPointNumbers""", version="""0.7"""))" - echo "%JL_BUILD_SCRIPT%" - C:\julia\bin\julia -e "%JL_BUILD_SCRIPT%" From ca3baf3881609db865c1a8c3c1d6fad416a531ab Mon Sep 17 00:00:00 2001 From: Nils Date: Wed, 25 Mar 2020 18:38:20 +0000 Subject: [PATCH 43/77] Add LinearAlgebra to make example with `norm` work --- src/shorthands.jl | 1 + 1 file changed, 1 insertion(+) diff --git a/src/shorthands.jl b/src/shorthands.jl index 57bfe176..81d290c7 100644 --- a/src/shorthands.jl +++ b/src/shorthands.jl @@ -271,6 +271,7 @@ Draw a 3D surface plot. # Example ```julia-repl +julia> using LinearAlgebra julia> x = y = range(-3, 3, length = 100) julia> surface(x, y, (x, y) -> sinc(norm([x, y]))) ``` From 932d0da73de46dc271947a73299479f5b182a0ec Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Thu, 26 Mar 2020 15:09:31 +0100 Subject: [PATCH 44/77] move `replaceAliases!` out of recipe processing --- src/args.jl | 4 ++-- src/pipeline.jl | 6 +++--- src/series.jl | 2 -- src/types.jl | 7 ++++--- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/args.jl b/src/args.jl index 82ca09d8..b388c641 100644 --- a/src/args.jl +++ b/src/args.jl @@ -916,8 +916,8 @@ function _add_markershape(plotattributes::AKW) end "Handle all preprocessing of args... break out colors/sizes/etc and replace aliases." -function preprocessArgs!(plotattributes::AKW) - replaceAliases!(plotattributes, _keyAliases) +function preprocessArgs!(plotattributes::AKW, replace_aliases = true) + replace_aliases && replaceAliases!(plotattributes, _keyAliases) # clear all axis stuff # if haskey(plotattributes, :axis) && plotattributes[:axis] in (:none, nothing, false) diff --git a/src/pipeline.jl b/src/pipeline.jl index 1e9cd991..383ac82a 100644 --- a/src/pipeline.jl +++ b/src/pipeline.jl @@ -96,7 +96,7 @@ function _process_userrecipe(plt::Plot, kw_list::Vector{KW}, recipedata::RecipeD # when the arg tuple is empty, that means there's nothing left to recursively # process... finish up and add to the kw_list kw = recipedata.plotattributes - preprocessArgs!(kw) + preprocessArgs!(kw, false) _preprocess_userrecipe(kw) warnOnUnsupported_scales(plt.backend, kw) @@ -185,7 +185,7 @@ function _process_plotrecipe(plt::Plot, kw::AKW, kw_list::Vector{KW}, still_to_p st = kw[:seriestype] = get(_typeAliases, st, st) datalist = RecipesBase.apply_recipe(kw, Val{st}, plt) for data in datalist - preprocessArgs!(data.plotattributes) + preprocessArgs!(data.plotattributes, false) if data.plotattributes[:seriestype] == st error("Plot recipe $st returned the same seriestype: $(data.plotattributes)") end @@ -413,7 +413,7 @@ function _process_seriesrecipe(plt::Plot, plotattributes::AKW) # assuming there was no error, recursively apply the series recipes for data in datalist if isa(data, RecipeData) - preprocessArgs!(data.plotattributes) + preprocessArgs!(data.plotattributes, false) if data.plotattributes[:seriestype] == st error("The seriestype didn't change in series recipe $st. This will cause a StackOverflow.") end diff --git a/src/series.jl b/src/series.jl index afebde8e..3e76d93a 100644 --- a/src/series.jl +++ b/src/series.jl @@ -227,7 +227,6 @@ _apply_type_recipe(plotattributes, v::AbstractArray{<:DataPoint}, letter) = v # axis args before type recipes should still be mapped to all axes function _preprocess_axis_args!(plotattributes) - replaceAliases!(plotattributes, _keyAliases) for (k, v) in plotattributes if haskey(_axis_defaults, k) pop!(plotattributes, k) @@ -247,7 +246,6 @@ end function _postprocess_axis_args!(plotattributes, letter) pop!(plotattributes, :letter) if letter in (:x, :y, :z) - replaceAliases!(plotattributes, _keyAliases) for (k, v) in plotattributes if haskey(_axis_defaults, k) pop!(plotattributes, k) diff --git a/src/types.jl b/src/types.jl index 4ee8e9e0..a866e59f 100644 --- a/src/types.jl +++ b/src/types.jl @@ -26,8 +26,9 @@ struct Attr <: AbstractDict{Symbol,Any} defaults::KW end -Base.getindex(attr::Attr, k) = haskey(attr.explicit,k) ? - attr.explicit[k] : attr.defaults[k] +function Base.getindex(attr::Attr, k) + return haskey(attr.explicit, k) ? attr.explicit[k] : attr.defaults[k] +end Base.haskey(attr::Attr, k) = haskey(attr.explicit,k) || haskey(attr.defaults,k) Base.get(attr::Attr, k, default) = haskey(attr, k) ? attr[k] : default function Base.get!(attr::Attr, k, default) @@ -41,7 +42,7 @@ end function Base.delete!(attr::Attr, k) haskey(attr.explicit, k) && delete!(attr.explicit, k) haskey(attr.defaults, k) && delete!(attr.defaults, k) -end +end Base.length(attr::Attr) = length(union(keys(attr.explicit), keys(attr.defaults))) function Base.iterate(attr::Attr) exp_keys = keys(attr.explicit) From f808a9fae5a541c9187b381fed9f41da877f0336 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2020 20:05:29 +0000 Subject: [PATCH 45/77] CompatHelper: bump compat for "StatsBase" to "0.33" --- Project.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Project.toml b/Project.toml index f03c1ed2..b85ce998 100644 --- a/Project.toml +++ b/Project.toml @@ -46,20 +46,20 @@ RecipesBase = "0.8" Reexport = "0.2" Requires = "0.5, 1.0" Showoff = "0.3.1" -StatsBase = "0.32" +StatsBase = "0.32, 0.33" julia = "1" [extras] FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" GeometryTypes = "4d00f742-c7ba-57c2-abde-4428a4b178cb" Gtk = "4c0ca9eb-093a-5379-98c5-f87ac0bbbf44" +HDF5 = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" ImageMagick = "6218d12a-5da1-5696-b52f-db25d2ecc6d1" Images = "916415d5-f1e6-5110-898d-aaa5f9f070e0" LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" LibGit2 = "76f85450-5226-5b5a-8eaa-529ad045b433" OffsetArrays = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" PGFPlotsX = "8314cec4-20b6-5062-9cdb-752b83310925" -HDF5 = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" RDatasets = "ce6b1742-4840-55fa-b093-852dadbb1d8b" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" From d1465ff40156ab8adce995195be08d8515a0fb31 Mon Sep 17 00:00:00 2001 From: Michael Krabbe Borregaard Date: Fri, 27 Mar 2020 07:07:13 +0100 Subject: [PATCH 46/77] Update Project.toml --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index b85ce998..4dd31e85 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "Plots" uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" author = ["Tom Breloff (@tbreloff)"] -version = "0.29.8" +version = "0.29.9" [deps] Base64 = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" From 0c2d80841c0f4035fd2cd18edaf56a90be7a6919 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Fri, 27 Mar 2020 13:44:39 +0100 Subject: [PATCH 47/77] warn on recipe aliases --- src/args.jl | 28 ++++++++++++++++++++++++++++ src/pipeline.jl | 33 +++++++++++++++++++++++++++++++-- src/recipes.jl | 4 ++-- src/series.jl | 3 +++ 4 files changed, 64 insertions(+), 4 deletions(-) diff --git a/src/args.jl b/src/args.jl index b388c641..f32bfe42 100644 --- a/src/args.jl +++ b/src/args.jl @@ -460,6 +460,24 @@ is_axis_attr_noletter(k) = haskey(_axis_defaults, k) RecipesBase.is_key_supported(k::Symbol) = is_attr_supported(k) +const _internal_args = + [:plot_object, :series_plotindex, :markershape_to_add, :letter, :idxfilter] +const _magic_axis_args = [:axis, :tickfont, :guidefont] +const _magic_subplot_args = [:titlefont, :legendfont, :legendtitlefont, ] +const _magic_series_args = [:line, :marker, :fill] + +function is_default_attribute(k::Symbol) + k in _internal_args && return true + k in _all_args && return true + is_axis_attr(k) && return true + is_axis_attr_noletter(k) && return true + k in _magic_axis_args && return true + k in _magic_subplot_args && return true + k in _magic_series_args && return true + Symbol(chop(string(k); head = 1, tail = 0)) in _magic_axis_args && return true + return false +end + # ----------------------------------------------------------------------------- makeplural(s::Symbol) = Symbol(string(s,"s")) @@ -1017,6 +1035,16 @@ function preprocessArgs!(plotattributes::AKW, replace_aliases = true) end end end + # handle axes guides + if haskey(plotattributes, :guide) + guide = pop!(plotattributes, :guide) + for letter in (:x, :y, :z) + guide_sym = Symbol(letter, :guide) + if !is_explicit(plotattributes, guide_sym) + plotattributes[guide_sym] = guide + end + end + end # handle line args for arg in wraptuple(pop_kw!(plotattributes, :line, ())) diff --git a/src/pipeline.jl b/src/pipeline.jl index 383ac82a..5b4d9bf5 100644 --- a/src/pipeline.jl +++ b/src/pipeline.jl @@ -1,4 +1,26 @@ +# Error for aliases used in recipes +function warn_on_recipe_aliases!(plotattributes, recipe_type, args...) + for k in keys(plotattributes) + if !is_default_attribute(k) + dk = get(_keyAliases, k, k) + if k !== dk + @warn "Attribute alias `$k` detected in the $recipe_type recipe defined for the signature $(signature_string(Val{recipe_type}, args...)). To ensure expected behavior it is recommended to use the default attribute `$dk`." + end + plotattributes[dk] = pop_kw!(plotattributes, k) + 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 signature_string(::Type{Val{:user}}, args...) + return string("(::", join(string.(typeof.(args)), ", ::"), ")") +end +signature_string(::Type{Val{:type}}, T) = "(::Type{$T}, ::$T)" +signature_string(::Type{Val{:plot}}, st) = "(::Type{Val{:$st}}, ::AbstractPlot)" +signature_string(::Type{Val{:series}}, st) = "(::Type{Val{:$st}}, x, y, z)" # ------------------------------------------------------------------ # preprocessing @@ -82,7 +104,11 @@ function _process_userrecipes(plt::Plot, plotattributes::AKW, args) if isempty(next_series.args) _process_userrecipe(plt, kw_list, next_series) else - rd_list = RecipesBase.apply_recipe(next_series.plotattributes, next_series.args...) + rd_list = RecipesBase.apply_recipe( + next_series.plotattributes, + next_series.args... + ) + warn_on_recipe_aliases!(rd_list, :user, next_series.args) prepend!(still_to_process,rd_list) end end @@ -184,6 +210,7 @@ function _process_plotrecipe(plt::Plot, kw::AKW, kw_list::Vector{KW}, still_to_p st = kw[:seriestype] st = kw[:seriestype] = get(_typeAliases, st, st) datalist = RecipesBase.apply_recipe(kw, Val{st}, plt) + warn_on_recipe_aliases!(datalist, :plot, st) for data in datalist preprocessArgs!(data.plotattributes, false) if data.plotattributes[:seriestype] == st @@ -408,7 +435,9 @@ function _process_seriesrecipe(plt::Plot, plotattributes::AKW) else # get a sub list of series for this seriestype - datalist = RecipesBase.apply_recipe(plotattributes, Val{st}, plotattributes[:x], plotattributes[:y], plotattributes[:z]) + x, y, z = plotattributes[:x], plotattributes[:y], plotattributes[:z] + datalist = RecipesBase.apply_recipe(plotattributes, Val{st}, x, y, z) + warn_on_recipe_aliases!(datalist, :series, st) # assuming there was no error, recursively apply the series recipes for data in datalist diff --git a/src/recipes.jl b/src/recipes.jl index dc94c1a9..79b4176d 100644 --- a/src/recipes.jl +++ b/src/recipes.jl @@ -1261,8 +1261,8 @@ end yflip := true aspect_ratio := 1 rs, cs, zs = findnz(z.surf) - xlim := ignorenan_extrema(cs) - ylim := ignorenan_extrema(rs) + xlims := ignorenan_extrema(cs) + ylims := ignorenan_extrema(rs) if plotattributes[:markershape] == :none markershape := :circle end diff --git a/src/series.jl b/src/series.jl index 3e76d93a..5df68409 100644 --- a/src/series.jl +++ b/src/series.jl @@ -178,6 +178,7 @@ end function _apply_type_recipe(plotattributes, v, letter) _preprocess_axis_args!(plotattributes, letter) rdvec = RecipesBase.apply_recipe(plotattributes, typeof(v), v) + warn_on_recipe_aliases!(plotattributes, :type, typeof(v)) _postprocess_axis_args!(plotattributes, letter) return rdvec[1].args[1] end @@ -189,11 +190,13 @@ function _apply_type_recipe(plotattributes, v::AbstractArray, letter) _preprocess_axis_args!(plotattributes, letter) # First we try to apply an array type recipe. w = RecipesBase.apply_recipe(plotattributes, typeof(v), v)[1].args[1] + warn_on_recipe_aliases!(plotattributes, :type, typeof(v)) # If the type did not change try it element-wise if typeof(v) == typeof(w) isempty(skipmissing(v)) && return Float64[] x = first(skipmissing(v)) args = RecipesBase.apply_recipe(plotattributes, typeof(x), x)[1].args + warn_on_recipe_aliases!(plotattributes, :type, typeof(x)) _postprocess_axis_args!(plotattributes, letter) if length(args) == 2 && all(arg -> arg isa Function, args) numfunc, formatter = args From 8594926b67f1010c05cd499b34dee1a31fca8ec3 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Fri, 27 Mar 2020 16:31:06 +0100 Subject: [PATCH 48/77] move `replaceAliases!` back to `preprocessArgs!` --- src/args.jl | 4 ++-- src/pipeline.jl | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/args.jl b/src/args.jl index f32bfe42..a2b70326 100644 --- a/src/args.jl +++ b/src/args.jl @@ -934,8 +934,8 @@ function _add_markershape(plotattributes::AKW) end "Handle all preprocessing of args... break out colors/sizes/etc and replace aliases." -function preprocessArgs!(plotattributes::AKW, replace_aliases = true) - replace_aliases && replaceAliases!(plotattributes, _keyAliases) +function preprocessArgs!(plotattributes::AKW) + replaceAliases!(plotattributes, _keyAliases) # clear all axis stuff # if haskey(plotattributes, :axis) && plotattributes[:axis] in (:none, nothing, false) diff --git a/src/pipeline.jl b/src/pipeline.jl index 5b4d9bf5..ef846dd1 100644 --- a/src/pipeline.jl +++ b/src/pipeline.jl @@ -122,7 +122,7 @@ function _process_userrecipe(plt::Plot, kw_list::Vector{KW}, recipedata::RecipeD # when the arg tuple is empty, that means there's nothing left to recursively # process... finish up and add to the kw_list kw = recipedata.plotattributes - preprocessArgs!(kw, false) + preprocessArgs!(kw) _preprocess_userrecipe(kw) warnOnUnsupported_scales(plt.backend, kw) @@ -212,7 +212,7 @@ function _process_plotrecipe(plt::Plot, kw::AKW, kw_list::Vector{KW}, still_to_p datalist = RecipesBase.apply_recipe(kw, Val{st}, plt) warn_on_recipe_aliases!(datalist, :plot, st) for data in datalist - preprocessArgs!(data.plotattributes, false) + preprocessArgs!(data.plotattributes) if data.plotattributes[:seriestype] == st error("Plot recipe $st returned the same seriestype: $(data.plotattributes)") end @@ -442,7 +442,7 @@ function _process_seriesrecipe(plt::Plot, plotattributes::AKW) # assuming there was no error, recursively apply the series recipes for data in datalist if isa(data, RecipeData) - preprocessArgs!(data.plotattributes, false) + preprocessArgs!(data.plotattributes) if data.plotattributes[:seriestype] == st error("The seriestype didn't change in series recipe $st. This will cause a StackOverflow.") end From e9ef5c852b8841e3a4dca4507dea4dac573ead85 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Fri, 27 Mar 2020 17:09:07 +0100 Subject: [PATCH 49/77] fix magic axis args for recipes --- src/args.jl | 11 ++++++++--- src/series.jl | 4 ++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/args.jl b/src/args.jl index a2b70326..cebc5344 100644 --- a/src/args.jl +++ b/src/args.jl @@ -466,12 +466,17 @@ const _magic_axis_args = [:axis, :tickfont, :guidefont] const _magic_subplot_args = [:titlefont, :legendfont, :legendtitlefont, ] const _magic_series_args = [:line, :marker, :fill] -function is_default_attribute(k::Symbol) +function is_noletter_attribute(k) + is_axis_attr_noletter(k) && return true + k in _magic_axis_args && return true + return false +end + +function is_default_attribute(k) k in _internal_args && return true k in _all_args && return true is_axis_attr(k) && return true - is_axis_attr_noletter(k) && return true - k in _magic_axis_args && return true + is_noletter_attribute(k) && return true k in _magic_subplot_args && return true k in _magic_series_args && return true Symbol(chop(string(k); head = 1, tail = 0)) in _magic_axis_args && return true diff --git a/src/series.jl b/src/series.jl index 5df68409..43cedc8b 100644 --- a/src/series.jl +++ b/src/series.jl @@ -231,7 +231,7 @@ _apply_type_recipe(plotattributes, v::AbstractArray{<:DataPoint}, letter) = v # axis args before type recipes should still be mapped to all axes function _preprocess_axis_args!(plotattributes) for (k, v) in plotattributes - if haskey(_axis_defaults, k) + if is_noletter_attribute(k) pop!(plotattributes, k) for l in (:x, :y, :z) lk = Symbol(l, k) @@ -250,7 +250,7 @@ function _postprocess_axis_args!(plotattributes, letter) pop!(plotattributes, :letter) if letter in (:x, :y, :z) for (k, v) in plotattributes - if haskey(_axis_defaults, k) + if is_noletter_attribute(k) pop!(plotattributes, k) lk = Symbol(letter, k) haskey(plotattributes, lk) || (plotattributes[lk] = v) From eecfdab590ceebbc0b533ce285306c3b4f926f14 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Mon, 23 Mar 2020 23:25:42 +0100 Subject: [PATCH 50/77] don't convertToAnyVector --- src/series.jl | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/series.jl b/src/series.jl index 725d2f8b..44c389f1 100644 --- a/src/series.jl +++ b/src/series.jl @@ -27,31 +27,31 @@ prepareSeriesData(s::Surface) = s # non-numeric Surface, such as an image prepareSeriesData(v::Volume) = Volume(prepareSeriesData(v.v), v.x_extents, v.y_extents, v.z_extents) # default: assume x represents a single series -convertToAnyVector(x, plotattributes) = Any[prepareSeriesData(x)] +series_vector(x, plotattributes) = [prepareSeriesData(x)] # fixed number of blank series -convertToAnyVector(n::Integer, plotattributes) = Any[zeros(0) for i in 1:n] +series_vector(n::Integer, plotattributes) = [zeros(0) for i in 1:n] # vector of data points is a single series -convertToAnyVector(v::AVec{<:DataPoint}, plotattributes) = Any[prepareSeriesData(v)] +series_vector(v::AVec{<:DataPoint}, plotattributes) = [prepareSeriesData(v)] # list of things (maybe other vectors, functions, or something else) -function convertToAnyVector(v::AVec, plotattributes) +function series_vector(v::AVec, plotattributes) if all(x -> x isa MaybeNumber, v) - convertToAnyVector(Vector{MaybeNumber}(v), plotattributes) + series_vector(Vector{MaybeNumber}(v), plotattributes) elseif all(x -> x isa MaybeString, v) - convertToAnyVector(Vector{MaybeString}(v), plotattributes) + series_vector(Vector{MaybeString}(v), plotattributes) else - vcat((convertToAnyVector(vi, plotattributes) for vi in v)...) + vcat((series_vector(vi, plotattributes) for vi in v)...) end end # Matrix is split into columns -function convertToAnyVector(v::AMat{<:DataPoint}, plotattributes) +function series_vector(v::AMat{<:DataPoint}, plotattributes) if all3D(plotattributes) - Any[prepareSeriesData(Surface(v))] + [prepareSeriesData(Surface(v))] else - Any[prepareSeriesData(v[:, i]) for i in axes(v, 2)] + [prepareSeriesData(v[:, i]) for i in axes(v, 2)] end end @@ -60,13 +60,13 @@ end process_fillrange(range::Number, plotattributes) = [range] -process_fillrange(range, plotattributes) = convertToAnyVector(range, plotattributes) +process_fillrange(range, plotattributes) = series_vector(range, plotattributes) process_ribbon(ribbon::Number, plotattributes) = [ribbon] -process_ribbon(ribbon, plotattributes) = convertToAnyVector(ribbon, plotattributes) +process_ribbon(ribbon, plotattributes) = series_vector(ribbon, plotattributes) # ribbon as a tuple: (lower_ribbons, upper_ribbons) -process_ribbon(ribbon::Tuple{Any,Any}, plotattributes) = collect(zip(convertToAnyVector(ribbon[1], plotattributes), - convertToAnyVector(ribbon[2], plotattributes))) +process_ribbon(ribbon::Tuple{Any,Any}, plotattributes) = collect(zip(series_vector(ribbon[1], plotattributes), + series_vector(ribbon[2], plotattributes))) # -------------------------------------------------------------------- @@ -126,9 +126,9 @@ struct SliceIt end z = z.data end - xs = convertToAnyVector(x, plotattributes) - ys = convertToAnyVector(y, plotattributes) - zs = convertToAnyVector(z, plotattributes) + xs = series_vector(x, plotattributes) + ys = series_vector(y, plotattributes) + zs = series_vector(z, plotattributes) fr = pop!(plotattributes, :fillrange, nothing) From 3d5ae2fc3b4946e6a1c57194cc38ad162fc1ef1c Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Fri, 27 Mar 2020 18:46:34 +0100 Subject: [PATCH 51/77] update precompile.jl --- src/precompile.jl | 124 ++++++++++++++++++++++++---------------------- 1 file changed, 65 insertions(+), 59 deletions(-) diff --git a/src/precompile.jl b/src/precompile.jl index c5ea00d8..5f377a1e 100644 --- a/src/precompile.jl +++ b/src/precompile.jl @@ -1,66 +1,63 @@ function _precompile_() ccall(:jl_generating_output, Cint, ()) == 1 || return nothing isdefined(Plots, Symbol("#@layout")) && precompile(Tuple{getfield(Plots, Symbol("#@layout")), LineNumberNode, Module, Expr}) - isdefined(Plots, Symbol("#kw##_make_hist")) && precompile(Tuple{getfield(Plots, Symbol("#kw##_make_hist")), NamedTuple{(:normed, :weights), Tuple{Bool, Array{Int64, 1}}}, typeof(Plots._make_hist), Tuple{Array{Float64, 1}}, Symbol}) - isdefined(Plots, Symbol("#kw##_make_hist")) && precompile(Tuple{getfield(Plots, Symbol("#kw##_make_hist")), NamedTuple{(:normed, :weights), Tuple{Bool, Nothing}}, typeof(Plots._make_hist), Tuple{Array{Float64, 1}, Array{Float64, 1}}, Int64}) - isdefined(Plots, Symbol("#kw##_make_hist")) && precompile(Tuple{getfield(Plots, Symbol("#kw##_make_hist")), NamedTuple{(:normed, :weights), Tuple{Bool, Nothing}}, typeof(Plots._make_hist), Tuple{Array{Float64, 1}, Array{Float64, 1}}, Tuple{Int64, Int64}}) - isdefined(Plots, Symbol("#kw##_make_hist")) && precompile(Tuple{getfield(Plots, Symbol("#kw##_make_hist")), NamedTuple{(:normed, :weights), Tuple{Bool, Nothing}}, typeof(Plots._make_hist), Tuple{Array{Float64, 1}}, Symbol}) - isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:foreground_color_grid, :grid, :gridalpha, :gridstyle, :gridlinewidth), Tuple{ColorTypes.RGBA{Float64}, Bool, Float64, Symbol, Int64}}, typeof(Plots.attr!), Plots.Axis}) - isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:formatter,), Tuple{Symbol}}, typeof(Plots.attr!), Plots.Axis}) - isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:grid, :lims), Tuple{Bool, Tuple{Int64, Int64}}}, typeof(Plots.attr!), Plots.Axis}) - isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:grid, :lims, :flip), Tuple{Bool, Tuple{Int64, Int64}, Bool}}, typeof(Plots.attr!), Plots.Axis}) - isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:grid, :ticks), Tuple{Bool, Nothing}}, typeof(Plots.attr!), Plots.Axis}) - isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:grid,), Tuple{Bool}}, typeof(Plots.attr!), Plots.Axis}) - isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:guide,), Tuple{String}}, typeof(Plots.attr!), Plots.Axis}) - isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:lims, :flip, :ticks, :guide), Tuple{Tuple{Int64, Int64}, Bool, Base.StepRange{Int64, Int64}, String}}, typeof(Plots.attr!), Plots.Axis}) - isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:lims,), Tuple{Tuple{Float64, Float64}}}, typeof(Plots.attr!), Plots.Axis}) - isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:lims,), Tuple{Tuple{Int64, Float64}}}, typeof(Plots.attr!), Plots.Axis}) - isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:lims,), Tuple{Tuple{Int64, Int64}}}, typeof(Plots.attr!), Plots.Axis}) - isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:rotation,), Tuple{Int64}}, typeof(Plots.attr!), Plots.Axis}) - isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:scale, :guide), Tuple{Symbol, String}}, typeof(Plots.attr!), Plots.Axis}) - isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:ticks,), Tuple{Base.UnitRange{Int64}}}, typeof(Plots.attr!), Plots.Axis}) - isdefined(Plots, Symbol("#kw##attr!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##attr!")), NamedTuple{(:ticks,), Tuple{Nothing}}, typeof(Plots.attr!), Plots.Axis}) - isdefined(Plots, Symbol("#kw##contour")) && precompile(Tuple{getfield(Plots, Symbol("#kw##contour")), NamedTuple{(:fill,), Tuple{Bool}}, typeof(Plots.contour), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Int}) - isdefined(Plots, Symbol("#kw##gr_polyline")) && precompile(Tuple{getfield(Plots, Symbol("#kw##gr_polyline")), NamedTuple{(:arrowside, :arrowstyle), Tuple{Symbol, Symbol}}, typeof(Plots.gr_polyline), Array{Float64, 1}, Array{Float64, 1}}) - isdefined(Plots, Symbol("#kw##gr_polyline")) && precompile(Tuple{getfield(Plots, Symbol("#kw##gr_polyline")), NamedTuple{(:arrowside, :arrowstyle), Tuple{Symbol, Symbol}}, typeof(Plots.gr_polyline), Array{Int64, 1}, Array{Float64, 1}}) - isdefined(Plots, Symbol("#kw##gr_polyline")) && precompile(Tuple{getfield(Plots, Symbol("#kw##gr_polyline")), NamedTuple{(:arrowside, :arrowstyle), Tuple{Symbol, Symbol}}, typeof(Plots.gr_polyline), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}) - isdefined(Plots, Symbol("#kw##gr_polyline")) && precompile(Tuple{getfield(Plots, Symbol("#kw##gr_polyline")), NamedTuple{(:arrowside, :arrowstyle), Tuple{Symbol, Symbol}}, typeof(Plots.gr_polyline), Base.StepRange{Int64, Int64}, Array{Float64, 1}}) - isdefined(Plots, Symbol("#kw##gr_polyline")) && precompile(Tuple{getfield(Plots, Symbol("#kw##gr_polyline")), NamedTuple{(:arrowside, :arrowstyle), Tuple{Symbol, Symbol}}, typeof(Plots.gr_polyline), Base.UnitRange{Int64}, Array{Float64, 1}}) - isdefined(Plots, Symbol("#kw##gr_polyline")) && precompile(Tuple{getfield(Plots, Symbol("#kw##gr_polyline")), NamedTuple{(:arrowside, :arrowstyle), Tuple{Symbol, Symbol}}, typeof(Plots.gr_polyline), Base.UnitRange{Int64}, Base.UnitRange{Int64}}) - isdefined(Plots, Symbol("#kw##gr_set_font")) && precompile(Tuple{getfield(Plots, Symbol("#kw##gr_set_font")), NamedTuple{(:halign, :valign, :rotation), Tuple{Symbol, Symbol, Int64}}, typeof(Plots.gr_set_font), Plots.Font}) - isdefined(Plots, Symbol("#kw##heatmap")) && precompile(Tuple{getfield(Plots, Symbol("#kw##heatmap")), NamedTuple{(:aspect_ratio,), Tuple{Int64}}, typeof(Plots.heatmap), Array{String, 1}, Int}) - isdefined(Plots, Symbol("#kw##histogram")) && precompile(Tuple{getfield(Plots, Symbol("#kw##histogram")), NamedTuple{(:bins, :weights), Tuple{Symbol, Array{Int64, 1}}}, typeof(Plots.histogram), Array{Float64, 1}}) - isdefined(Plots, Symbol("#kw##histogram2d")) && precompile(Tuple{getfield(Plots, Symbol("#kw##histogram2d")), NamedTuple{(:nbins, :show_empty_bins, :normed, :aspect_ratio), Tuple{Tuple{Int64, Int64}, Bool, Bool, Int64}}, typeof(Plots.histogram2d), Array{Base.Complex{Float64}, 1}}) - isdefined(Plots, Symbol("#kw##histogram2d")) && precompile(Tuple{getfield(Plots, Symbol("#kw##histogram2d")), NamedTuple{(:nbins,), Tuple{Int64}}, typeof(Plots.histogram2d), Array{Float64, 1}, Array{Float64, 1}}) - isdefined(Plots, Symbol("#kw##hline!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##hline!")), NamedTuple{(:line,), Tuple{Tuple{Int64, Symbol, Float64, Array{Symbol, 2}}}}, typeof(Plots.hline!), Array{Float64, 2}}) - isdefined(Plots, Symbol("#kw##lens!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##lens!")), NamedTuple{(:inset,), Tuple{Tuple{Int64, Measures.BoundingBox{Tuple{Measures.Length{:w, Float64}, Measures.Length{:h, Float64}}, Tuple{Measures.Length{:w, Float64}, Measures.Length{:h, Float64}}}}}}, typeof(Plots.lens!), Array{Int64, 1}, Int}) - isdefined(Plots, Symbol("#kw##pie")) && precompile(Tuple{getfield(Plots, Symbol("#kw##pie")), NamedTuple{(:title, :l), Tuple{String, Float64}}, typeof(Plots.pie), Array{String, 1}, Int}) - isdefined(Plots, Symbol("#kw##plotly_annotation_dict")) && precompile(Tuple{getfield(Plots, Symbol("#kw##plotly_annotation_dict")), NamedTuple{(:xref, :yref), Tuple{String, String}}, typeof(Plots.plotly_annotation_dict), Float64, Float64, Plots.PlotText}) - isdefined(Plots, Symbol("#kw##plotly_annotation_dict")) && precompile(Tuple{getfield(Plots, Symbol("#kw##plotly_annotation_dict")), NamedTuple{(:xref, :yref), Tuple{String, String}}, typeof(Plots.plotly_annotation_dict), Float64, Float64, String}) - isdefined(Plots, Symbol("#kw##plotly_annotation_dict")) && precompile(Tuple{getfield(Plots, Symbol("#kw##plotly_annotation_dict")), NamedTuple{(:xref, :yref), Tuple{String, String}}, typeof(Plots.plotly_annotation_dict), Int64, Float64, Plots.PlotText}) - isdefined(Plots, Symbol("#kw##plotly_annotation_dict")) && precompile(Tuple{getfield(Plots, Symbol("#kw##plotly_annotation_dict")), NamedTuple{(:xref, :yref), Tuple{String, String}}, typeof(Plots.plotly_annotation_dict), Int64, Float64, String}) - isdefined(Plots, Symbol("#kw##portfoliocomposition")) && precompile(Tuple{getfield(Plots, Symbol("#kw##portfoliocomposition")), NamedTuple{(:labels,), Tuple{Array{String, 2}}}, typeof(Plots.portfoliocomposition), Array{Float64, 2}, Int}) - isdefined(Plots, Symbol("#kw##scatter!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##scatter!")), NamedTuple{(:marker, :series_annotations), Tuple{Tuple{Int64, Float64, Symbol}, Array{Any, 1}}}, typeof(Plots.scatter!), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Int}) - isdefined(Plots, Symbol("#kw##scatter!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##scatter!")), NamedTuple{(:markersize, :c), Tuple{Int64, Symbol}}, typeof(Plots.scatter!), Array{Float64, 1}}) - isdefined(Plots, Symbol("#kw##scatter!")) && precompile(Tuple{getfield(Plots, Symbol("#kw##scatter!")), NamedTuple{(:zcolor, :m, :ms, :lab), Tuple{Array{Float64, 1}, Tuple{Symbol, Float64, Plots.Stroke}, Array{Float64, 1}, String}}, typeof(Plots.scatter!), Array{Float64, 1}}) - isdefined(Plots, Symbol("#kw##scatter")) && precompile(Tuple{getfield(Plots, Symbol("#kw##scatter")), NamedTuple{(:framestyle, :title, :color, :layout, :label, :markerstrokewidth, :ticks), Tuple{Array{Symbol, 2}, Array{String, 2}, Base.ReshapedArray{Int64, 2, Base.UnitRange{Int64}, Tuple{}}, Int64, String, Int64, Base.UnitRange{Int64}}}, typeof(Plots.scatter), Array{Array{Float64, 1}, 1}, Array{Array{Float64, 1}, 1}}) - isdefined(Plots, Symbol("#kw##scatter")) && precompile(Tuple{getfield(Plots, Symbol("#kw##scatter")), NamedTuple{(:m, :lab, :bg, :xlim, :ylim), Tuple{Tuple{Int64, Symbol}, Array{String, 2}, Symbol, Tuple{Int64, Int64}, Tuple{Int64, Int64}}}, typeof(Plots.scatter), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Int}) - isdefined(Plots, Symbol("#kw##scatter")) && precompile(Tuple{getfield(Plots, Symbol("#kw##scatter")), NamedTuple{(:marker_z, :color, :legend), Tuple{typeof(Base.:+), Symbol, Bool}}, typeof(Plots.scatter), Array{Float64, 1}, Array{Float64, 1}}) - isdefined(Plots, Symbol("#kw##standalone_html")) && precompile(Tuple{getfield(Plots, Symbol("#kw##standalone_html")), NamedTuple{(:title,), Tuple{String}}, typeof(Plots.standalone_html), Plots.Plot{Plots.PlotlyBackend}}) - isdefined(Plots, Symbol("#kw##test_examples")) && precompile(Tuple{getfield(Plots, Symbol("#kw##test_examples")), NamedTuple{(:skip,), Tuple{Array{Int64, 1}}}, typeof(Plots.test_examples), Symbol}) + isdefined(Plots, Symbol("#_make_hist##kw")) && precompile(Tuple{getfield(Plots, Symbol("#_make_hist##kw")), NamedTuple{(:normed, :weights), Tuple{Bool, Array{Int64, 1}}}, typeof(Plots._make_hist), Tuple{Array{Float64, 1}}, Symbol}) + 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{(: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}) + isdefined(Plots, Symbol("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:lims,), Tuple{Tuple{Int64, Float64}}}, typeof(Plots.attr!), Plots.Axis}) + isdefined(Plots, Symbol("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:lims,), Tuple{Tuple{Int64, Int64}}}, typeof(Plots.attr!), Plots.Axis}) + isdefined(Plots, Symbol("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:rotation,), Tuple{Int64}}, typeof(Plots.attr!), Plots.Axis}) + isdefined(Plots, Symbol("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:scale, :guide), Tuple{Symbol, String}}, typeof(Plots.attr!), Plots.Axis}) + 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("#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}}) + 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.StepRange{Int64, Int64}, 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.UnitRange{Int64}, 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.UnitRange{Int64}, Base.UnitRange{Int64}}) + isdefined(Plots, Symbol("#gr_set_font##kw")) && precompile(Tuple{getfield(Plots, Symbol("#gr_set_font##kw")), NamedTuple{(:halign, :valign, :rotation), Tuple{Symbol, Symbol, Int64}}, typeof(Plots.gr_set_font), Plots.Font}) + isdefined(Plots, Symbol("#heatmap##kw")) && precompile(Tuple{getfield(Plots, Symbol("#heatmap##kw")), NamedTuple{(:aspect_ratio,), Tuple{Int64}}, typeof(Plots.heatmap), Array{String, 1}, Int}) + isdefined(Plots, Symbol("#histogram##kw")) && precompile(Tuple{getfield(Plots, Symbol("#histogram##kw")), NamedTuple{(:bins, :weights), Tuple{Symbol, Array{Int64, 1}}}, typeof(Plots.histogram), Array{Float64, 1}}) + isdefined(Plots, Symbol("#histogram2d##kw")) && precompile(Tuple{getfield(Plots, Symbol("#histogram2d##kw")), NamedTuple{(:nbins, :show_empty_bins, :normed, :aspect_ratio), Tuple{Tuple{Int64, Int64}, Bool, Bool, Int64}}, typeof(Plots.histogram2d), Array{Base.Complex{Float64}, 1}}) + isdefined(Plots, Symbol("#histogram2d##kw")) && precompile(Tuple{getfield(Plots, Symbol("#histogram2d##kw")), NamedTuple{(:nbins,), Tuple{Int64}}, typeof(Plots.histogram2d), Array{Float64, 1}, Array{Float64, 1}}) + isdefined(Plots, Symbol("#hline!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#hline!##kw")), NamedTuple{(:line,), Tuple{Tuple{Int64, Symbol, Float64, Array{Symbol, 2}}}}, typeof(Plots.hline!), Array{Float64, 2}}) + isdefined(Plots, Symbol("#lens!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#lens!##kw")), NamedTuple{(:inset,), Tuple{Tuple{Int64, Measures.BoundingBox{Tuple{Measures.Length{:w, Float64}, Measures.Length{:h, Float64}}, Tuple{Measures.Length{:w, Float64}, Measures.Length{:h, Float64}}}}}}, typeof(Plots.lens!), Array{Int64, 1}, Int}) + isdefined(Plots, Symbol("#pie##kw")) && precompile(Tuple{getfield(Plots, Symbol("#pie##kw")), NamedTuple{(:title, :l), Tuple{String, Float64}}, typeof(Plots.pie), Array{String, 1}, Int}) + isdefined(Plots, Symbol("#plotly_annotation_dict##kw")) && precompile(Tuple{getfield(Plots, Symbol("#plotly_annotation_dict##kw")), NamedTuple{(:xref, :yref), Tuple{String, String}}, typeof(Plots.plotly_annotation_dict), Float64, Float64, Plots.PlotText}) + isdefined(Plots, Symbol("#plotly_annotation_dict##kw")) && precompile(Tuple{getfield(Plots, Symbol("#plotly_annotation_dict##kw")), NamedTuple{(:xref, :yref), Tuple{String, String}}, typeof(Plots.plotly_annotation_dict), Float64, Float64, String}) + isdefined(Plots, Symbol("#plotly_annotation_dict##kw")) && precompile(Tuple{getfield(Plots, Symbol("#plotly_annotation_dict##kw")), NamedTuple{(:xref, :yref), Tuple{String, String}}, typeof(Plots.plotly_annotation_dict), Int64, Float64, Plots.PlotText}) + isdefined(Plots, Symbol("#plotly_annotation_dict##kw")) && precompile(Tuple{getfield(Plots, Symbol("#plotly_annotation_dict##kw")), NamedTuple{(:xref, :yref), Tuple{String, String}}, typeof(Plots.plotly_annotation_dict), Int64, Float64, String}) + isdefined(Plots, Symbol("#portfoliocomposition##kw")) && precompile(Tuple{getfield(Plots, Symbol("#portfoliocomposition##kw")), NamedTuple{(:labels,), Tuple{Array{String, 2}}}, typeof(Plots.portfoliocomposition), Array{Float64, 2}, Int}) + isdefined(Plots, Symbol("#scatter!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#scatter!##kw")), NamedTuple{(:marker, :series_annotations), Tuple{Tuple{Int64, Float64, Symbol}, Array{Any, 1}}}, typeof(Plots.scatter!), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Int}) + isdefined(Plots, Symbol("#scatter!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#scatter!##kw")), NamedTuple{(:markersize, :c), Tuple{Int64, Symbol}}, typeof(Plots.scatter!), Array{Float64, 1}}) + isdefined(Plots, Symbol("#scatter!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#scatter!##kw")), NamedTuple{(:zcolor, :m, :ms, :lab), Tuple{Array{Float64, 1}, Tuple{Symbol, Float64, Plots.Stroke}, Array{Float64, 1}, String}}, typeof(Plots.scatter!), Array{Float64, 1}}) + isdefined(Plots, Symbol("#scatter##kw")) && precompile(Tuple{getfield(Plots, Symbol("#scatter##kw")), NamedTuple{(:framestyle, :title, :color, :layout, :label, :markerstrokewidth, :ticks), Tuple{Array{Symbol, 2}, Array{String, 2}, Base.ReshapedArray{Int64, 2, Base.UnitRange{Int64}, Tuple{}}, Int64, String, Int64, Base.UnitRange{Int64}}}, typeof(Plots.scatter), Array{Array{Float64, 1}, 1}, Array{Array{Float64, 1}, 1}}) + isdefined(Plots, Symbol("#scatter##kw")) && precompile(Tuple{getfield(Plots, Symbol("#scatter##kw")), NamedTuple{(:m, :lab, :bg, :xlim, :ylim), Tuple{Tuple{Int64, Symbol}, Array{String, 2}, Symbol, Tuple{Int64, Int64}, Tuple{Int64, Int64}}}, typeof(Plots.scatter), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Int}) + isdefined(Plots, Symbol("#scatter##kw")) && precompile(Tuple{getfield(Plots, Symbol("#scatter##kw")), NamedTuple{(:marker_z, :color, :legend), Tuple{typeof(Base.:+), Symbol, Bool}}, typeof(Plots.scatter), Array{Float64, 1}, Array{Float64, 1}}) + isdefined(Plots, Symbol("#standalone_html##kw")) && precompile(Tuple{getfield(Plots, Symbol("#standalone_html##kw")), NamedTuple{(:title,), Tuple{String}}, typeof(Plots.standalone_html), Plots.Plot{Plots.PlotlyBackend}}) + isdefined(Plots, Symbol("#test_examples##kw")) && precompile(Tuple{getfield(Plots, Symbol("#test_examples##kw")), NamedTuple{(:skip,), Tuple{Array{Int64, 1}}}, typeof(Plots.test_examples), Symbol}) precompile(Tuple{typeof(Plots.__init__)}) precompile(Tuple{typeof(Plots._add_errorbar_kw), Array{Base.Dict{Symbol, Any}, 1}, Base.Dict{Symbol, Any}}) precompile(Tuple{typeof(Plots._add_markershape), Base.Dict{Symbol, Any}}) 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{Array{Float64, 1}, 1}}) - precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, Array{Array{T, 1} where T, 1}}) - precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, Array{Function, 1}}) - precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, Array{Real, 1}}) - precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, Array{String, 1}}) - precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, Array{Union{Base.Missing, Int64}, 1}}) - precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, typeof(identity)}) + 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}, typeof(identity), Symbol}) precompile(Tuple{typeof(Plots._backend_instance), Symbol}) precompile(Tuple{typeof(Plots._bin_centers), Array{Float64, 1}}) precompile(Tuple{typeof(Plots._binbarlike_baseline), Float64, Symbol}) @@ -212,6 +209,7 @@ function _precompile_() precompile(Tuple{typeof(Plots._plot_setup), Plots.Plot{Plots.PlotlyBackend}, Base.Dict{Symbol, Any}, Array{Base.Dict{Symbol, Any}, 1}}) precompile(Tuple{typeof(Plots._plotly_framestyle), Symbol}) precompile(Tuple{typeof(Plots._plots_defaults)}) + precompile(Tuple{typeof(Plots._postprocess_axis_args!), Base.Dict{Symbol, Any}, Symbol}) precompile(Tuple{typeof(Plots._prepare_annotations), Plots.Subplot{Plots.GRBackend}, Plots.Attr}) precompile(Tuple{typeof(Plots._prepare_annotations), Plots.Subplot{Plots.PlotlyBackend}, Plots.Attr}) precompile(Tuple{typeof(Plots._prepare_subplot), Plots.Plot{Plots.GRBackend}, Plots.Attr}) @@ -242,6 +240,7 @@ function _precompile_() precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Plots.Spy}, Array{RecipesBase.RecipeData, 1}}) precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{typeof(Base.log), Int64}, Array{RecipesBase.RecipeData, 1}}) precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{}, Array{RecipesBase.RecipeData, 1}}) + precompile(Tuple{typeof(Plots._preprocess_axis_args!), Base.Dict{Symbol, Any}}) precompile(Tuple{typeof(Plots._preprocess_barlike), Plots.Attr, Array{Float64, 1}, Array{Float64, 1}}) precompile(Tuple{typeof(Plots._preprocess_barlike), Plots.Attr, Array{Int64, 1}, Array{Float64, 1}}) precompile(Tuple{typeof(Plots._preprocess_barlike), Plots.Attr, Base.OneTo{Int64}, Array{Float64, 1}}) @@ -392,6 +391,7 @@ function _precompile_() precompile(Tuple{typeof(Plots.color_or_nothing!), Plots.Attr, Symbol}) precompile(Tuple{typeof(Plots.colorbar_style), Plots.Series}) precompile(Tuple{typeof(Plots.compute_gridsize), Int64, Int64, Int64}) + precompile(Tuple{typeof(Plots.compute_x), Nothing, Plots.Surface{Array{Float64, 2}}, Nothing}) precompile(Tuple{typeof(Plots.compute_xyz), Array{Float64, 1}, Array{Float64, 1}, Base.UnitRange{Int64}}) precompile(Tuple{typeof(Plots.compute_xyz), Array{Float64, 1}, Array{Float64, 1}, Nothing}) precompile(Tuple{typeof(Plots.compute_xyz), Array{Float64, 1}, typeof(identity), Nothing}) @@ -399,21 +399,19 @@ function _precompile_() precompile(Tuple{typeof(Plots.compute_xyz), Array{String, 1}, Array{String, 1}, Plots.Surface{Array{Float64, 2}}}) precompile(Tuple{typeof(Plots.compute_xyz), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}, Nothing}) precompile(Tuple{typeof(Plots.compute_xyz), 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.compute_xyz), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Plots.Surface{Array{Float64, 2}}, Nothing}) precompile(Tuple{typeof(Plots.compute_xyz), Base.StepRange{Int64, Int64}, Array{Float64, 1}, Nothing}) + precompile(Tuple{typeof(Plots.compute_xyz), Base.StepRange{Int64, Int64}, Plots.Surface{Array{Float64, 2}}, Nothing}) precompile(Tuple{typeof(Plots.compute_xyz), Nothing, Array{Float64, 1}, Nothing}) precompile(Tuple{typeof(Plots.compute_xyz), Nothing, Array{Union{Base.Missing, Float64}, 1}, Nothing}) precompile(Tuple{typeof(Plots.compute_xyz), Nothing, Base.UnitRange{Int64}, Nothing}) precompile(Tuple{typeof(Plots.compute_xyz), Nothing, Nothing, Nothing}) + precompile(Tuple{typeof(Plots.compute_xyz), Nothing, Plots.Surface{Array{Float64, 2}}, Nothing}) precompile(Tuple{typeof(Plots.concatenate_fillrange), Base.UnitRange{Int64}, Tuple{Array{Float64, 1}, Array{Float64, 1}}}) precompile(Tuple{typeof(Plots.contour), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Int}) precompile(Tuple{typeof(Plots.contour_levels), Plots.Series, Tuple{Float64, Float64}}) precompile(Tuple{typeof(Plots.convertLegendValue), Bool}) precompile(Tuple{typeof(Plots.convertLegendValue), Symbol}) - precompile(Tuple{typeof(Plots.convertToAnyVector), Array{Array{Float64, 1}, 1}, Base.Dict{Symbol, Any}}) - precompile(Tuple{typeof(Plots.convertToAnyVector), Array{Array{T, 1} where T, 1}, Base.Dict{Symbol, Any}}) - precompile(Tuple{typeof(Plots.convertToAnyVector), Array{Float64, 2}, Base.Dict{Symbol, Any}}) - precompile(Tuple{typeof(Plots.convertToAnyVector), Array{Function, 1}, Base.Dict{Symbol, Any}}) - precompile(Tuple{typeof(Plots.convertToAnyVector), Int64, Base.Dict{Symbol, Any}}) precompile(Tuple{typeof(Plots.convert_sci_unicode), String}) precompile(Tuple{typeof(Plots.convert_to_polar), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}, Tuple{Int64, Float64}}) precompile(Tuple{typeof(Plots.copy_series!), Plots.Series, Symbol}) @@ -796,6 +794,14 @@ 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{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}}) + precompile(Tuple{typeof(Plots.series_vector), Array{Function, 1}, Base.Dict{Symbol, Any}}) + precompile(Tuple{typeof(Plots.series_vector), Array{Real, 1}, Base.Dict{Symbol, Any}}) + precompile(Tuple{typeof(Plots.series_vector), Array{Union{Base.Missing, Int64}, 1}, Base.Dict{Symbol, Any}}) + precompile(Tuple{typeof(Plots.series_vector), Array{Union{Base.Missing, Number}, 1}, Base.Dict{Symbol, Any}}) + precompile(Tuple{typeof(Plots.series_vector), typeof(identity), Base.Dict{Symbol, Any}}) precompile(Tuple{typeof(Plots.shape_data), Plots.Series, Int64}) precompile(Tuple{typeof(Plots.should_add_to_legend), Plots.Series}) precompile(Tuple{typeof(Plots.showaxis), Symbol, Symbol}) From aa2cee405ac9374cc680d46df207ddeeb642e5a1 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Fri, 27 Mar 2020 19:52:46 +0100 Subject: [PATCH 52/77] Revert "CompatHelper: bump compat for "StatsBase" to "0.33"" --- Project.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Project.toml b/Project.toml index 4dd31e85..26d82018 100644 --- a/Project.toml +++ b/Project.toml @@ -46,20 +46,20 @@ RecipesBase = "0.8" Reexport = "0.2" Requires = "0.5, 1.0" Showoff = "0.3.1" -StatsBase = "0.32, 0.33" +StatsBase = "0.32" julia = "1" [extras] FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" GeometryTypes = "4d00f742-c7ba-57c2-abde-4428a4b178cb" Gtk = "4c0ca9eb-093a-5379-98c5-f87ac0bbbf44" -HDF5 = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" ImageMagick = "6218d12a-5da1-5696-b52f-db25d2ecc6d1" Images = "916415d5-f1e6-5110-898d-aaa5f9f070e0" LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" LibGit2 = "76f85450-5226-5b5a-8eaa-529ad045b433" OffsetArrays = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" PGFPlotsX = "8314cec4-20b6-5062-9cdb-752b83310925" +HDF5 = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" RDatasets = "ce6b1742-4840-55fa-b093-852dadbb1d8b" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" From c5aebf1309cd3f7aa26ae738ac1436f88d3eb353 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Sat, 28 Mar 2020 21:00:06 +0100 Subject: [PATCH 53/77] add Codecov coverage --- .travis.yml | 3 +++ README.md | 1 + 2 files changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index aa1f8bfe..a4ca0ed6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,6 +32,9 @@ before_install: notifications: email: true +after_success: + - julia -e 'using Pkg; Pkg.add("Coverage"); using Coverage; Codecov.submit(process_folder())' + script: - if [[ -a .git/shallow ]]; then git fetch --unshallow; fi - if [[ `uname` = "Linux" ]]; then TESTCMD="xvfb-run julia"; else TESTCMD="julia"; fi diff --git a/README.md b/README.md index 3c57fef1..ae3a3dd9 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ [![][pkgeval-img]][pkgeval-url] [![][gitter-img]][gitter-url] [![][docs-img]][docs-url] +[![Codecov](https://codecov.io/gh/JuliaPlots/Plots.jl/branch/master/graph/badge.svg)](https://codecov.io/gh/JuliaPlots/Plots.jl) #### Created by Tom Breloff (@tbreloff) From df9217e3b940eb3a93939ac758e868e549bc2286 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Sat, 28 Mar 2020 21:52:03 +0100 Subject: [PATCH 54/77] move `/src/backends/template.jl` to `/templates/backends.jl` for coverage --- src/backends/template.jl => templates/backends.jl | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/backends/template.jl => templates/backends.jl (100%) diff --git a/src/backends/template.jl b/templates/backends.jl similarity index 100% rename from src/backends/template.jl rename to templates/backends.jl From d8c4c535677cf8ddb4e1cb60a7b91352e8b794cf Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Sat, 28 Mar 2020 22:54:49 +0100 Subject: [PATCH 55/77] ignore some files in coverage --- codecov.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 codecov.yml diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 00000000..79baa3c2 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,10 @@ +ignore: + - "src/backends/inspectdr.jl" + - "src/backends/orca.jl" + - "src/backends/pgfplots.jl" + - "src/backends/plotly.jl" + - "src/backends/plotlyjs.jl" + - "src/backends/pyplot.jl" + - "src/backends/web.jl" + - "src/fileio.jl" + - "src/ijulia.jl" From 076de033fde711909cf2c48c1f6fc01193adf676 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Sun, 29 Mar 2020 15:39:44 +0200 Subject: [PATCH 56/77] fix `default` with axis args --- src/args.jl | 101 +++++++++++++++++++----------------------------- src/axes.jl | 3 ++ src/pipeline.jl | 10 +---- src/series.jl | 4 +- 4 files changed, 47 insertions(+), 71 deletions(-) diff --git a/src/args.jl b/src/args.jl index cebc5344..9a19211c 100644 --- a/src/args.jl +++ b/src/args.jl @@ -450,38 +450,33 @@ const _initial_fontsizes = Dict(:titlefontsize => _subplot_defaults[:titlefonts :tickfontsize => _axis_defaults[:tickfontsize], :guidefontsize => _axis_defaults[:guidefontsize]) -const _all_args = sort(collect(union(map(keys, _all_defaults)...))) - -is_subplot_attr(k) = haskey(_subplot_defaults, k) -is_series_attr(k) = haskey(_series_defaults, k) -#is_axis_attr(k) = haskey(_axis_defaults_byletter, k) -is_axis_attr(k) = haskey(_axis_defaults, Symbol(chop(string(k); head=1, tail=0))) -is_axis_attr_noletter(k) = haskey(_axis_defaults, k) - -RecipesBase.is_key_supported(k::Symbol) = is_attr_supported(k) - const _internal_args = [:plot_object, :series_plotindex, :markershape_to_add, :letter, :idxfilter] -const _magic_axis_args = [:axis, :tickfont, :guidefont] + +const _axis_args = sort(union(collect(keys(_axis_defaults)))) +const _series_args = sort(union(collect(keys(_series_defaults)))) +const _subplot_args = sort(union(collect(keys(_subplot_defaults)))) +const _plot_args = sort(union(collect(keys(_plot_defaults)))) + +const _magic_axis_args = [:axis, :tickfont, :guidefont, :grid, :minorgrid] const _magic_subplot_args = [:titlefont, :legendfont, :legendtitlefont, ] const _magic_series_args = [:line, :marker, :fill] -function is_noletter_attribute(k) - is_axis_attr_noletter(k) && return true - k in _magic_axis_args && return true - return false -end +const _all_axis_args = sort(union([_axis_args; _magic_axis_args])) +const _all_subplot_args = sort(union([_subplot_args; _magic_subplot_args])) +const _all_series_args = sort(union([_series_args; _magic_series_args])) +const _all_plot_args = _plot_args -function is_default_attribute(k) - k in _internal_args && return true - k in _all_args && return true - is_axis_attr(k) && return true - is_noletter_attribute(k) && return true - k in _magic_subplot_args && return true - k in _magic_series_args && return true - Symbol(chop(string(k); head = 1, tail = 0)) in _magic_axis_args && return true - return false -end +const _all_args = + sort([_all_axis_args; _all_subplot_args; _all_series_args; _all_plot_args]) + +is_subplot_attr(k) = k in _all_subplot_args +is_series_attr(k) = k in _all_series_args +is_axis_attr(k) = Symbol(chop(string(k); head=1, tail=0)) in _all_axis_args +is_axis_attr_noletter(k) = k in _all_axis_args + +RecipesBase.is_key_supported(k::Symbol) = is_attr_supported(k) +is_default_attribute(k) = k in _internal_args || k in _all_args || is_axis_attr_noletter(k) # ----------------------------------------------------------------------------- @@ -942,22 +937,6 @@ end function preprocessArgs!(plotattributes::AKW) replaceAliases!(plotattributes, _keyAliases) - # clear all axis stuff - # if haskey(plotattributes, :axis) && plotattributes[:axis] in (:none, nothing, false) - # plotattributes[:ticks] = nothing - # plotattributes[:foreground_color_border] = RGBA(0,0,0,0) - # plotattributes[:foreground_color_axis] = RGBA(0,0,0,0) - # plotattributes[:grid] = false - # delete!(plotattributes, :axis) - # end - # for letter in (:x, :y, :z) - # asym = Symbol(letter, :axis) - # if haskey(plotattributes, asym) || plotattributes[asym] in (:none, nothing, false) - # plotattributes[Symbol(letter, :ticks)] = nothing - # plotattributes[Symbol(letter, :foreground_color_border)] = RGBA(0,0,0,0) - # end - # end - # handle axis args common to all axis args = pop_kw!(plotattributes, :axis, ()) for arg in wraptuple(args) @@ -1015,13 +994,6 @@ function preprocessArgs!(plotattributes::AKW) processMinorGridArg!(plotattributes, arg, letter) end end - # fonts - for fontname in (:titlefont, :legendfont, :legendtitlefont) - args = pop_kw!(plotattributes, fontname, ()) - for arg in wraptuple(args) - processFontArg!(plotattributes, fontname, arg) - end - end # handle font args common to all axes for fontname in (:tickfont, :guidefont) args = pop_kw!(plotattributes, fontname, ()) @@ -1040,17 +1012,27 @@ function preprocessArgs!(plotattributes::AKW) end end end - # handle axes guides - if haskey(plotattributes, :guide) - guide = pop!(plotattributes, :guide) - for letter in (:x, :y, :z) - guide_sym = Symbol(letter, :guide) - if !is_explicit(plotattributes, guide_sym) - plotattributes[guide_sym] = guide + # handle axes args + for k in _axis_args + if haskey(plotattributes, k) + v = plotattributes[k] + for letter in (:x, :y, :z) + lk = Symbol(letter, k) + if !is_explicit(plotattributes, lk) + plotattributes[lk] = v + end end end end + # fonts + for fontname in (:titlefont, :legendfont, :legendtitlefont) + args = pop_kw!(plotattributes, fontname, ()) + for arg in wraptuple(args) + processFontArg!(plotattributes, fontname, arg) + end + end + # handle line args for arg in wraptuple(pop_kw!(plotattributes, :line, ())) processLineArg(plotattributes, arg) @@ -1504,12 +1486,9 @@ function _update_axis(plt::Plot, sp::Subplot, plotattributes_in::AKW, letter::Sy end function _update_axis(axis::Axis, plotattributes_in::AKW, letter::Symbol, subplot_index::Int) - # grab magic args (for example `xaxis = (:flip, :log)`) - args = wraptuple(get(plotattributes_in, Symbol(letter, :axis), ())) - # build the KW of arguments from the letter version (i.e. xticks --> ticks) kw = KW() - for k in keys(_axis_defaults) + for k in _all_axis_args # first get the args without the letter: `tickfont = font(10)` # note: we don't pop because we want this to apply to all axes! (delete after all have finished) if haskey(plotattributes_in, k) @@ -1524,7 +1503,7 @@ function _update_axis(axis::Axis, plotattributes_in::AKW, letter::Symbol, subplo end # update the axis - attr!(axis, args...; kw...) + attr!(axis; kw...) return end diff --git a/src/axes.jl b/src/axes.jl index 702ff5ba..822de875 100644 --- a/src/axes.jl +++ b/src/axes.jl @@ -84,6 +84,9 @@ function attr!(axis::Axis, args...; kw...) process_axis_arg!(plotattributes, arg) end + # then preprocess keyword arguments + preprocessArgs!(KW(kw)) + # then override for any keywords... only those keywords that already exists in plotattributes for (k,v) in kw if haskey(plotattributes, k) diff --git a/src/pipeline.jl b/src/pipeline.jl index ef846dd1..2659b74c 100644 --- a/src/pipeline.jl +++ b/src/pipeline.jl @@ -62,14 +62,8 @@ function _preprocess_args(plotattributes::AKW, args, still_to_process::Vector{Re # remove subplot and axis args from plotattributes... they will be passed through in the kw_list if !isempty(args) for (k,v) in plotattributes - for defdict in (_subplot_defaults, - _axis_defaults, - _axis_defaults_byletter[:x], - _axis_defaults_byletter[:y], - _axis_defaults_byletter[:z]) - if haskey(defdict, k) - reset_kw!(plotattributes, k) - end + if k in _all_subplot_args || k in _all_axis_args + reset_kw!(plotattributes, k) end end end diff --git a/src/series.jl b/src/series.jl index bbb49469..a2799d9e 100644 --- a/src/series.jl +++ b/src/series.jl @@ -227,7 +227,7 @@ _apply_type_recipe(plotattributes, v::AbstractArray{<:DataPoint}, letter) = v # axis args before type recipes should still be mapped to all axes function _preprocess_axis_args!(plotattributes) for (k, v) in plotattributes - if is_noletter_attribute(k) + if is_axis_attr_noletter(k) pop!(plotattributes, k) for l in (:x, :y, :z) lk = Symbol(l, k) @@ -246,7 +246,7 @@ function _postprocess_axis_args!(plotattributes, letter) pop!(plotattributes, :letter) if letter in (:x, :y, :z) for (k, v) in plotattributes - if is_noletter_attribute(k) + if is_axis_attr_noletter(k) pop!(plotattributes, k) lk = Symbol(letter, k) haskey(plotattributes, lk) || (plotattributes[lk] = v) From a5b6c27beca81bebba5c626058c65d0cf4040841 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Sun, 29 Mar 2020 16:25:23 +0200 Subject: [PATCH 57/77] add new test --- src/examples.jl | 30 ++++++++++++++++++++++++++++++ test/runtests.jl | 1 + 2 files changed, 31 insertions(+) diff --git a/src/examples.jl b/src/examples.jl index f17832a5..5ae70450 100644 --- a/src/examples.jl +++ b/src/examples.jl @@ -889,6 +889,36 @@ const _examples = PlotExample[ end, ], ), + PlotExample( + "Setting defaults and font arguments", + "", + [ + quote + begin + using Plots, LaTeXStrings + default( + titlefont = (20, "times"), + legendfontsize = 18, + guidefont = (18, :darkgreen), + tickfont = (12, :orange), + guide = L"x", + framestyle = :zerolines, + yminorgrid = true + ) + plot( + [sin, cos], + -2π, + 2π, + label = [L"sin(\theta)" L"cos(\theta)"], + title = "Trigonometric Functions", + xlabel = L"\theta", + linewidth = 2, + legend = :outertopleft, + ) + end + end, + ], + ), ] # Some constants for PlotDocs and PlotReferenceImages diff --git a/test/runtests.jl b/test/runtests.jl index 9b36f097..e5c74b58 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -8,6 +8,7 @@ using Gtk using LibGit2 using GeometryTypes using Dates +using LaTeXStrings include("test_hdf5plots.jl") include("test_pgfplotsx.jl") From 9243de6ce9055e1840707cc39ea7fd4c8a2a58d8 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Sun, 29 Mar 2020 17:00:57 +0200 Subject: [PATCH 58/77] add texlive-base --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index a4ca0ed6..da45839a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,6 +17,7 @@ addons: packages: - at-spi2-core - libgtk-3-dev + - texlive-base - xauth - xvfb From 5da33d7de8f5ce5ca7cdf16cd21972bfcc269028 Mon Sep 17 00:00:00 2001 From: yha Date: Sun, 29 Mar 2020 18:17:31 +0300 Subject: [PATCH 59/77] Verbose flag for animations --- src/animation.jl | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/animation.jl b/src/animation.jl index e0a12d9f..f83880a0 100644 --- a/src/animation.jl +++ b/src/animation.jl @@ -71,6 +71,7 @@ function buildanimation(anim::Animation, fn::AbstractString, is_animated_gif::Bool=true; fps::Real = 20, loop::Integer = 0, variable_palette::Bool=false, + verbose=false, show_msg::Bool=true) if length(anim.frames) == 0 throw(ArgumentError("Cannot build empty animations")) @@ -79,20 +80,23 @@ function buildanimation(anim::Animation, fn::AbstractString, fn = abspath(expanduser(fn)) animdir = anim.dir framerate = ffmpeg_framerate(fps) + verbose_level = (verbose isa Int ? verbose : + verbose ? 32 # "info" + : 16) # "error" if is_animated_gif if variable_palette # generate a colorpalette for each frame for highest quality, but larger filesize palette="palettegen=stats_mode=single[pal],[0:v][pal]paletteuse=new=1" - ffmpeg_exe(`-v 0 -framerate $framerate -loop $loop -i $(animdir)/%06d.png -lavfi "$palette" -y $fn`) + ffmpeg_exe(`-v $verbose_level -framerate $framerate -loop $loop -i $(animdir)/%06d.png -lavfi "$palette" -y $fn`) else # generate a colorpalette first so ffmpeg does not have to guess it - ffmpeg_exe(`-v 0 -i $(animdir)/%06d.png -vf "palettegen=stats_mode=diff" -y "$(animdir)/palette.bmp"`) + ffmpeg_exe(`-v $verbose_level -i $(animdir)/%06d.png -vf "palettegen=stats_mode=diff" -y "$(animdir)/palette.bmp"`) # then apply the palette to get better results - ffmpeg_exe(` -v 0 -framerate $framerate -loop $loop -i $(animdir)/%06d.png -i "$(animdir)/palette.bmp" -lavfi "paletteuse=dither=sierra2_4a" -y $fn`) + ffmpeg_exe(`-v $verbose_level -framerate $framerate -loop $loop -i $(animdir)/%06d.png -i "$(animdir)/palette.bmp" -lavfi "paletteuse=dither=sierra2_4a" -y $fn`) end else - ffmpeg_exe(`-v 0 -framerate $framerate -loop $loop -i $(animdir)/%06d.png -pix_fmt yuv420p -y $fn`) + ffmpeg_exe(`-v $verbose_level -framerate $framerate -loop $loop -i $(animdir)/%06d.png -pix_fmt yuv420p -y $fn`) end show_msg && @info("Saved animation to ", fn) From 246632abca06eeb5a5688875d712a640c639bda2 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Sun, 29 Mar 2020 17:39:56 +0200 Subject: [PATCH 60/77] ok, don't use latex in tests --- .travis.yml | 4 +++- Project.toml | 3 +-- src/examples.jl | 8 ++++---- test/runtests.jl | 1 - 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index da45839a..abf00122 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,10 +17,12 @@ addons: packages: - at-spi2-core - libgtk-3-dev - - texlive-base - xauth - xvfb +env: + - GKS_ENCODING="utf8" + cache: directories: - $HOME/.julia/artifacts diff --git a/Project.toml b/Project.toml index 26d82018..1b164cc1 100644 --- a/Project.toml +++ b/Project.toml @@ -55,7 +55,6 @@ GeometryTypes = "4d00f742-c7ba-57c2-abde-4428a4b178cb" Gtk = "4c0ca9eb-093a-5379-98c5-f87ac0bbbf44" ImageMagick = "6218d12a-5da1-5696-b52f-db25d2ecc6d1" Images = "916415d5-f1e6-5110-898d-aaa5f9f070e0" -LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" LibGit2 = "76f85450-5226-5b5a-8eaa-529ad045b433" OffsetArrays = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" PGFPlotsX = "8314cec4-20b6-5062-9cdb-752b83310925" @@ -69,4 +68,4 @@ UnicodePlots = "b8865327-cd53-5732-bb35-84acbb429228" VisualRegressionTests = "34922c18-7c2a-561c-bac1-01e79b2c4c92" [targets] -test = ["FileIO", "GeometryTypes", "Gtk", "ImageMagick", "Images", "LaTeXStrings", "LibGit2", "OffsetArrays", "PGFPlotsX", "HDF5", "Random", "RDatasets", "StaticArrays", "StatsPlots", "Test", "UnicodePlots", "VisualRegressionTests"] +test = ["FileIO", "GeometryTypes", "Gtk", "ImageMagick", "Images", "LibGit2", "OffsetArrays", "PGFPlotsX", "HDF5", "Random", "RDatasets", "StaticArrays", "StatsPlots", "Test", "UnicodePlots", "VisualRegressionTests"] diff --git a/src/examples.jl b/src/examples.jl index 5ae70450..a1592df8 100644 --- a/src/examples.jl +++ b/src/examples.jl @@ -895,13 +895,13 @@ const _examples = PlotExample[ [ quote begin - using Plots, LaTeXStrings + using Plots default( titlefont = (20, "times"), legendfontsize = 18, guidefont = (18, :darkgreen), tickfont = (12, :orange), - guide = L"x", + guide = "x", framestyle = :zerolines, yminorgrid = true ) @@ -909,9 +909,9 @@ const _examples = PlotExample[ [sin, cos], -2π, 2π, - label = [L"sin(\theta)" L"cos(\theta)"], + label = ["sin(θ)" "cos(θ)"], title = "Trigonometric Functions", - xlabel = L"\theta", + xlabel = "θ", linewidth = 2, legend = :outertopleft, ) diff --git a/test/runtests.jl b/test/runtests.jl index e5c74b58..9b36f097 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -8,7 +8,6 @@ using Gtk using LibGit2 using GeometryTypes using Dates -using LaTeXStrings include("test_hdf5plots.jl") include("test_pgfplotsx.jl") From ae009cd53f0f226d43924a175c0719c4c71857a0 Mon Sep 17 00:00:00 2001 From: wfrgra Date: Mon, 30 Mar 2020 20:02:06 +1100 Subject: [PATCH 61/77] 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 7d34b9bb46123499439d0e6eea305b40de849e61 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Mon, 30 Mar 2020 11:39:01 +0200 Subject: [PATCH 62/77] fix julia versions in tests --- .travis.yml | 2 +- appveyor.yml | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index abf00122..60b5bbde 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,8 +4,8 @@ os: - linux # - osx julia: + - 1.0 - 1 - - 1.4 - nightly matrix: diff --git a/appveyor.yml b/appveyor.yml index 7742efb2..911fe8f4 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,8 +1,7 @@ environment: matrix: - # - julia_version: 0.7 + - julia_version: 1.0 - julia_version: 1 - - julia_version: 1.4 - julia_version: nightly platform: From f1f9d807e625494089be3458bc812d2c729c45d1 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Mon, 30 Mar 2020 11:39:50 +0200 Subject: [PATCH 63/77] don't pin FixedPointNumbers in tests --- .travis.yml | 2 +- appveyor.yml | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 60b5bbde..ccd58dfb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -41,4 +41,4 @@ after_success: script: - if [[ -a .git/shallow ]]; then git fetch --unshallow; fi - if [[ `uname` = "Linux" ]]; then TESTCMD="xvfb-run julia"; else TESTCMD="julia"; fi - - $TESTCMD -e 'using Pkg; if VERSION == v"1.4"; Pkg.resolve(); end; Pkg.pin(PackageSpec(name="FixedPointNumbers", version="0.7")); Pkg.build(); Pkg.test(coverage=true)' + - $TESTCMD -e 'using Pkg; Pkg.build(); Pkg.test(coverage=true)' diff --git a/appveyor.yml b/appveyor.yml index 911fe8f4..081e56df 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -32,8 +32,7 @@ install: - ps: iex ((new-object net.webclient).DownloadString("https://raw.githubusercontent.com/JuliaCI/Appveyor.jl/version-1/bin/install.ps1")) build_script: - - C:\julia\bin\julia --project=C:\projects\plots-jl -e "using Pkg; if VERSION == v"""1.4"""; Pkg.resolve(); end; Pkg.pin(PackageSpec(name="""FixedPointNumbers""", version="""0.7"""))" - - echo "%JL_BUILD_SCRIPT%" + - echo "%JL_TEST_SCRIPT%" - C:\julia\bin\julia -e "%JL_BUILD_SCRIPT%" test_script: From cb8df169c79d443fca5435c6fdd1d4561ab05adc Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Mon, 30 Mar 2020 12:37:26 +0200 Subject: [PATCH 64/77] fix typo --- src/backends/plotlyjs.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backends/plotlyjs.jl b/src/backends/plotlyjs.jl index 7f86cc66..b43944be 100644 --- a/src/backends/plotlyjs.jl +++ b/src/backends/plotlyjs.jl @@ -42,7 +42,7 @@ _display(plt::Plot{PlotlyJSBackend}) = display(plotlyjs_syncplot(plt)) @require WebIO = "0f1e0344-ec1d-5b48-a673-e5cf874b6c29" begin function WebIO.render(plt::Plot{PlotlyJSBackend}) - plt_html = sprint(show, MIME("text/html"), x) + plt_html = sprint(show, MIME("text/html"), plt) return WebIO.render(dom"div"(innerHTML=plt_html)) end end From f62f4806c3af8be8c358c47a97376c78d54165f5 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Mon, 30 Mar 2020 23:49:29 +0200 Subject: [PATCH 65/77] remove some more `Any` in `series.jl` --- src/series.jl | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/series.jl b/src/series.jl index e2ae1057..699d885f 100644 --- a/src/series.jl +++ b/src/series.jl @@ -65,8 +65,10 @@ process_fillrange(range, plotattributes) = series_vector(range, plotattributes) process_ribbon(ribbon::Number, plotattributes) = [ribbon] process_ribbon(ribbon, plotattributes) = series_vector(ribbon, plotattributes) # ribbon as a tuple: (lower_ribbons, upper_ribbons) -process_ribbon(ribbon::Tuple{Any,Any}, plotattributes) = collect(zip(series_vector(ribbon[1], plotattributes), - series_vector(ribbon[2], plotattributes))) +process_ribbon(ribbon::Tuple{S, T}, plotattributes) where {S, T} = collect(zip( + series_vector(ribbon[1], plotattributes), + series_vector(ribbon[2], plotattributes), +)) # -------------------------------------------------------------------- @@ -166,7 +168,7 @@ struct SliceIt end end # this is the default "type recipe"... just pass the object through -@recipe f(::Type{T}, v::T) where {T<:Any} = v +@recipe f(::Type{T}, v::T) where T = v # this should catch unhandled "series recipes" and error with a nice message @recipe f(::Type{V}, x, y, z) where {V<:Val} = error("The backend must not support the series type $V, and there isn't a series recipe defined.") @@ -572,13 +574,7 @@ end end @recipe function f(fs::AbstractArray{F}, xmin::Number, xmax::Number) where F<:Function xscale, yscale = [get(plotattributes, sym, :identity) for sym=(:xscale,:yscale)] - xs = Array{Any}(undef, length(fs)) - ys = Array{Any}(undef, length(fs)) - for (i, (x, y)) in enumerate(_scaled_adapted_grid(f, xscale, yscale, xmin, xmax) for f in fs) - xs[i] = x - ys[i] = y - end - xs, ys + unzip(_scaled_adapted_grid.(fs, xscale, yscale, xmin, xmax)) end @recipe f(fx::FuncOrFuncs{F}, fy::FuncOrFuncs{G}, u::AVec) where {F<:Function,G<:Function} = mapFuncOrFuncs(fx, u), mapFuncOrFuncs(fy, u) @recipe f(fx::FuncOrFuncs{F}, fy::FuncOrFuncs{G}, umin::Number, umax::Number, n = 200) where {F<:Function,G<:Function} = fx, fy, range(umin, stop = umax, length = n) From 2a4b74d0fff7e92a3972fed97f3d076f413eed0b Mon Sep 17 00:00:00 2001 From: wfrgra Date: Tue, 31 Mar 2020 19:38:47 +1100 Subject: [PATCH 66/77] 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 67/77] 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 68/77] 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 69/77] 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 70/77] 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 71/77] 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 72/77] 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 73/77] 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 74/77] 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 75/77] 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 76/77] 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 77/77] 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