Compare commits
133
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d2ca5e3bf3 | ||
|
|
b645ca984f | ||
|
|
46a3f2e495 | ||
|
|
e4e9cbf6cb | ||
|
|
0b8f7d67dc | ||
|
|
faf6ea72e0 | ||
|
|
b6f7c8bc4b | ||
|
|
e084c1410c | ||
|
|
ea790cc7c5 | ||
|
|
ea74fcd4d6 | ||
|
|
4a4f9dff6a | ||
|
|
db02ffa436 | ||
|
|
2c78f1ff7b | ||
|
|
c472ecf3b0 | ||
|
|
70c507b8f8 | ||
|
|
2245e572aa | ||
|
|
05eed0fdda | ||
|
|
c8b75dfae1 | ||
|
|
94812cde7a | ||
|
|
3db930cb93 | ||
|
|
eab5091147 | ||
|
|
b8f21ad878 | ||
|
|
cb4702f7b8 | ||
|
|
25313f6b43 | ||
|
|
a0e0c2c950 | ||
|
|
8b43f70ed4 | ||
|
|
867a2b8748 | ||
|
|
63cd86589c | ||
|
|
31c4414c32 | ||
|
|
36558389b6 | ||
|
|
686ab1b51f | ||
|
|
a728ed9a60 | ||
|
|
00fd916595 | ||
|
|
7c5b7b09c2 | ||
|
|
c3c63971ab | ||
|
|
5c1c80fd9a | ||
|
|
c9a9541d0e | ||
|
|
224858dad5 | ||
|
|
8a9e963d92 | ||
|
|
464c0271f0 | ||
|
|
798d78813a | ||
|
|
6b0e45c450 | ||
|
|
cf8bd786d0 | ||
|
|
9b4a51c5be | ||
|
|
b58c52f12c | ||
|
|
17eef46da2 | ||
|
|
cc14ab20bb | ||
|
|
978f00bbb9 | ||
|
|
d0a73eb862 | ||
|
|
0ca5a30b8a | ||
|
|
76c7d9dc89 | ||
|
|
653e0b80b2 | ||
|
|
8b0fc1629a | ||
|
|
a76e756f4f | ||
|
|
f632cd48a4 | ||
|
|
e12b0a585c | ||
|
|
151ce619dc | ||
|
|
28903d5db2 | ||
|
|
d179b5d6bf | ||
|
|
12df8fa500 | ||
|
|
99293ba5e6 | ||
|
|
2dc3096ee9 | ||
|
|
926a023b1d | ||
|
|
4f705a6e58 | ||
|
|
74beb86530 | ||
|
|
a55f8d0099 | ||
|
|
caca1b2e3c | ||
|
|
62fe5d003e | ||
|
|
216dae97fc | ||
|
|
07ffa8c117 | ||
|
|
62dc012c66 | ||
|
|
831987c76f | ||
|
|
32b85d48c5 | ||
|
|
f6d37afba0 | ||
|
|
3b962ffb08 | ||
|
|
2c3bffaf76 | ||
|
|
ba8110dc20 | ||
|
|
55e17a4a65 | ||
|
|
767b8b245a | ||
|
|
2ea37776ed | ||
|
|
03d2f704c5 | ||
|
|
f7e19bcf63 | ||
|
|
1e0fcbc65e | ||
|
|
5d5c4d76b9 | ||
|
|
871561afd7 | ||
|
|
1da4b2eda9 | ||
|
|
9775abecc2 | ||
|
|
1650049b88 | ||
|
|
d7cc15d391 | ||
|
|
57286ea40d | ||
|
|
5ad4c517e1 | ||
|
|
eba6e29092 | ||
|
|
7dc6ea355c | ||
|
|
3e31c4363f | ||
|
|
61e3abaf80 | ||
|
|
bd8e9dc947 | ||
|
|
236aaed2a3 | ||
|
|
37044e5fc8 | ||
|
|
b05d6e2ed3 | ||
|
|
d28164c897 | ||
|
|
6c68b6f6fe | ||
|
|
d0c6f0d6ee | ||
|
|
150b5a1f06 | ||
|
|
8ea6d70433 | ||
|
|
f8ee4da180 | ||
|
|
4a57f462bc | ||
|
|
11ae5ea014 | ||
|
|
4cb3e6a23c | ||
|
|
dd645bcd9f | ||
|
|
bccf4ef563 | ||
|
|
85e2534e93 | ||
|
|
2c57e0c958 | ||
|
|
cb161a25da | ||
|
|
a4380586e9 | ||
|
|
f2a583a599 | ||
|
|
3ea4c8d9ca | ||
|
|
30f321d88b | ||
|
|
1db3b69489 | ||
|
|
3a775315b9 | ||
|
|
1ed9bcae5c | ||
|
|
03d57e690c | ||
|
|
4247584df2 | ||
|
|
844c3f7002 | ||
|
|
ff774dc409 | ||
|
|
9fd7a84b48 | ||
|
|
e555f679c1 | ||
|
|
89613bfee5 | ||
|
|
3fdf87a955 | ||
|
|
0f07975857 | ||
|
|
48a245559c | ||
|
|
3614966241 | ||
|
|
9a6e0b3a54 | ||
|
|
f75ae01c16 |
+17
-3
@@ -4,12 +4,21 @@ os:
|
|||||||
- linux
|
- linux
|
||||||
# - osx
|
# - osx
|
||||||
julia:
|
julia:
|
||||||
- 1.1
|
- 1
|
||||||
|
- 1.2
|
||||||
- nightly
|
- nightly
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
allow_failures:
|
allow_failures:
|
||||||
- julia: nightly
|
- julia: nightly
|
||||||
|
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- at-spi2-core
|
||||||
|
- libgtk-3-dev
|
||||||
|
- xauth
|
||||||
|
- xvfb
|
||||||
|
|
||||||
sudo: required
|
sudo: required
|
||||||
before_install:
|
before_install:
|
||||||
@@ -18,3 +27,8 @@ before_install:
|
|||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
email: true
|
email: true
|
||||||
|
|
||||||
|
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)'
|
||||||
|
|||||||
@@ -11,6 +11,15 @@
|
|||||||
---
|
---
|
||||||
## (current master)
|
## (current master)
|
||||||
|
|
||||||
|
## 0.26.3
|
||||||
|
- fix `vline` with dates
|
||||||
|
- fix PyPlot logscale bug
|
||||||
|
- avoid annotation clipping for PyPlot
|
||||||
|
- allow plotting of Any vectors and 3D plotting again in convertToAnyVector
|
||||||
|
- specify legend title font in GR and PyPlot
|
||||||
|
- delete `pushtomaster.sh`
|
||||||
|
- use `=== nothing`
|
||||||
|
|
||||||
## 0.26.2
|
## 0.26.2
|
||||||
- improve empty animation build error
|
- improve empty animation build error
|
||||||
- fix GR axis flip for heatmaps and images
|
- fix GR axis flip for heatmaps and images
|
||||||
|
|||||||
+6
-5
@@ -1,7 +1,7 @@
|
|||||||
name = "Plots"
|
name = "Plots"
|
||||||
uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
|
uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
|
||||||
author = ["Tom Breloff (@tbreloff)"]
|
author = ["Tom Breloff (@tbreloff)"]
|
||||||
version = "0.26.2"
|
version = "0.27.1"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
Base64 = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
|
Base64 = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
|
||||||
@@ -34,24 +34,25 @@ UUIDs = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
|
|||||||
FixedPointNumbers = "≥ 0.3.0"
|
FixedPointNumbers = "≥ 0.3.0"
|
||||||
GR = "≥ 0.31.0"
|
GR = "≥ 0.31.0"
|
||||||
PlotThemes = "≥ 0.1.3"
|
PlotThemes = "≥ 0.1.3"
|
||||||
PlotUtils = "≥ 0.4.1"
|
PlotUtils = "≥ 0.6.1"
|
||||||
RecipesBase = "≥ 0.6.0"
|
RecipesBase = "≥ 0.6.0"
|
||||||
StatsBase = "≥ 0.14.0"
|
StatsBase = "≥ 0.14.0"
|
||||||
julia = "≥ 1.0.0"
|
julia = "≥ 1.0.0"
|
||||||
|
|
||||||
[extras]
|
[extras]
|
||||||
FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549"
|
FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549"
|
||||||
|
GeometryTypes = "4d00f742-c7ba-57c2-abde-4428a4b178cb"
|
||||||
|
Gtk = "4c0ca9eb-093a-5379-98c5-f87ac0bbbf44"
|
||||||
ImageMagick = "6218d12a-5da1-5696-b52f-db25d2ecc6d1"
|
ImageMagick = "6218d12a-5da1-5696-b52f-db25d2ecc6d1"
|
||||||
Images = "916415d5-f1e6-5110-898d-aaa5f9f070e0"
|
Images = "916415d5-f1e6-5110-898d-aaa5f9f070e0"
|
||||||
LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
|
LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
|
||||||
Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
|
LibGit2 = "76f85450-5226-5b5a-8eaa-529ad045b433"
|
||||||
RDatasets = "ce6b1742-4840-55fa-b093-852dadbb1d8b"
|
RDatasets = "ce6b1742-4840-55fa-b093-852dadbb1d8b"
|
||||||
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
|
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
|
||||||
StatsPlots = "f3b207a7-027a-5e70-b257-86293d7955fd"
|
StatsPlots = "f3b207a7-027a-5e70-b257-86293d7955fd"
|
||||||
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
|
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
|
||||||
UnicodePlots = "b8865327-cd53-5732-bb35-84acbb429228"
|
UnicodePlots = "b8865327-cd53-5732-bb35-84acbb429228"
|
||||||
VisualRegressionTests = "34922c18-7c2a-561c-bac1-01e79b2c4c92"
|
VisualRegressionTests = "34922c18-7c2a-561c-bac1-01e79b2c4c92"
|
||||||
BinaryProvider = "b99e7846-7c00-51b0-8f62-c81ae34c0232"
|
|
||||||
|
|
||||||
[targets]
|
[targets]
|
||||||
test = ["BinaryProvider", "Pkg", "Test", "Random", "StatsPlots", "VisualRegressionTests", "LaTeXStrings", "Images", "ImageMagick", "RDatasets", "FileIO", "UnicodePlots"]
|
test = ["FileIO", "GeometryTypes", "Gtk", "ImageMagick", "Images", "LaTeXStrings", "LibGit2", "Random", "RDatasets", "StatsPlots", "Test", "UnicodePlots", "VisualRegressionTests"]
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ environment:
|
|||||||
matrix:
|
matrix:
|
||||||
# - julia_version: 0.7
|
# - julia_version: 0.7
|
||||||
- julia_version: 1
|
- julia_version: 1
|
||||||
|
- julia_version: 1.2
|
||||||
- julia_version: nightly
|
- julia_version: nightly
|
||||||
|
|
||||||
platform:
|
platform:
|
||||||
|
|||||||
Vendored
+50
@@ -0,0 +1,50 @@
|
|||||||
|
# To figure out what should be precompiled, run this script, then move
|
||||||
|
# precompile_Plots.jl in precompiles_path (see below) to src/precompile.jl
|
||||||
|
|
||||||
|
# This script works by using SnoopCompile to log compilations that take place
|
||||||
|
# while running the examples on the GR backend. So SnoopCompile must be
|
||||||
|
# installed, and StatsPlots, RDatasets, and FileIO are also required for
|
||||||
|
# certain examples.
|
||||||
|
|
||||||
|
# If precompilation fails with an UndefVarError for a module, probably what is
|
||||||
|
# happening is that the module appears in the precompile statements, but is
|
||||||
|
# only visible to one of Plots' dependencies, and not Plots itself. Adding the
|
||||||
|
# module to the blacklist below will remove these precompile statements.
|
||||||
|
|
||||||
|
# Anonymous functions may appear in precompile statements as functions with
|
||||||
|
# hashes in their name. Those of the form "#something##kw" have to do with
|
||||||
|
# compiling functions with keyword arguments, and are named reproducibly, so
|
||||||
|
# can be kept. Others generally will not work. Currently, SnoopCompile includes
|
||||||
|
# some anonymous functions that not reproducible, but SnoopCompile PR #30
|
||||||
|
# (which looks about to be merged) will ensure that anonymous functions are
|
||||||
|
# actually defined before attempting to precompile them. Alternatively, we can
|
||||||
|
# keep only the keyword argument related anonymous functions by changing the
|
||||||
|
# regex that SnoopCompile uses to detect anonymous functions to
|
||||||
|
# r"#{1,2}[^\"#]+#{1,2}\d+" (see anonrex in SnoopCompile.jl). To exclude all
|
||||||
|
# precompile statements involving anonymous functions, "#" can also be added to
|
||||||
|
# the blacklist below.
|
||||||
|
|
||||||
|
using SnoopCompile
|
||||||
|
|
||||||
|
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
|
||||||
|
using Plots
|
||||||
|
Plots.test_examples(:gr, disp=true)
|
||||||
|
end
|
||||||
|
|
||||||
|
# precompile calls containing the following strings are dropped
|
||||||
|
blacklist = [
|
||||||
|
# functions defined in examples
|
||||||
|
"PlotExampleModule",
|
||||||
|
# the following are not visible to Plots, only its dependencies
|
||||||
|
"CategoricalArrays",
|
||||||
|
"FixedPointNumbers",
|
||||||
|
"SparseArrays"
|
||||||
|
]
|
||||||
|
|
||||||
|
data = SnoopCompile.read(log_path)
|
||||||
|
pc = SnoopCompile.parcel(reverse!(data[2]), blacklist=blacklist)
|
||||||
|
SnoopCompile.write(precompiles_path, pc)
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
git checkout master
|
|
||||||
git merge --ff-only dev
|
|
||||||
git push origin master
|
|
||||||
git checkout dev
|
|
||||||
+5
-3
@@ -1,6 +1,6 @@
|
|||||||
module Plots
|
module Plots
|
||||||
|
|
||||||
_current_plots_version = v"0.26.1"
|
const _current_plots_version = VersionNumber(split(first(filter(line -> occursin("version", line), readlines(normpath(@__DIR__, "..", "Project.toml")))), "\"")[2])
|
||||||
|
|
||||||
using Reexport
|
using Reexport
|
||||||
|
|
||||||
@@ -220,7 +220,9 @@ end
|
|||||||
|
|
||||||
# ---------------------------------------------------------
|
# ---------------------------------------------------------
|
||||||
|
|
||||||
const CURRENT_BACKEND = Plots.CurrentBackend(:gr)
|
const CURRENT_BACKEND = CurrentBackend(:none)
|
||||||
gr()
|
|
||||||
|
include("precompile.jl")
|
||||||
|
_precompile_()
|
||||||
|
|
||||||
end # module
|
end # module
|
||||||
|
|||||||
+16
-8
@@ -64,10 +64,12 @@ gif(anim::Animation, fn = giffn(); kw...) = buildanimation(anim, fn; kw...)
|
|||||||
mov(anim::Animation, fn = movfn(); kw...) = buildanimation(anim, fn, false; kw...)
|
mov(anim::Animation, fn = movfn(); kw...) = buildanimation(anim, fn, false; kw...)
|
||||||
mp4(anim::Animation, fn = mp4fn(); kw...) = buildanimation(anim, fn, false; kw...)
|
mp4(anim::Animation, fn = mp4fn(); kw...) = buildanimation(anim, fn, false; kw...)
|
||||||
|
|
||||||
|
ffmpeg_framerate(fps) = "$fps"
|
||||||
|
ffmpeg_framerate(fps::Rational) = "$(fps.num)/$(fps.den)"
|
||||||
|
|
||||||
function buildanimation(anim::Animation, fn::AbstractString,
|
function buildanimation(anim::Animation, fn::AbstractString,
|
||||||
is_animated_gif::Bool=true;
|
is_animated_gif::Bool=true;
|
||||||
fps::Integer = 20, loop::Integer = 0,
|
fps::Real = 20, loop::Integer = 0,
|
||||||
variable_palette::Bool=false,
|
variable_palette::Bool=false,
|
||||||
show_msg::Bool=true)
|
show_msg::Bool=true)
|
||||||
if length(anim.frames) == 0
|
if length(anim.frames) == 0
|
||||||
@@ -76,20 +78,21 @@ function buildanimation(anim::Animation, fn::AbstractString,
|
|||||||
|
|
||||||
fn = abspath(expanduser(fn))
|
fn = abspath(expanduser(fn))
|
||||||
animdir = anim.dir
|
animdir = anim.dir
|
||||||
|
framerate = ffmpeg_framerate(fps)
|
||||||
|
|
||||||
if is_animated_gif
|
if is_animated_gif
|
||||||
if variable_palette
|
if variable_palette
|
||||||
# generate a colorpalette for each frame for highest quality, but larger filesize
|
# generate a colorpalette for each frame for highest quality, but larger filesize
|
||||||
palette="palettegen=stats_mode=single[pal],[0:v][pal]paletteuse=new=1"
|
palette="palettegen=stats_mode=single[pal],[0:v][pal]paletteuse=new=1"
|
||||||
ffmpeg_exe(`-v 0 -framerate $fps -loop $loop -i $(animdir)/%06d.png -lavfi "$palette" -y $fn`)
|
ffmpeg_exe(`-v 0 -framerate $framerate -loop $loop -i $(animdir)/%06d.png -lavfi "$palette" -y $fn`)
|
||||||
else
|
else
|
||||||
# generate a colorpalette first so ffmpeg does not have to guess it
|
# 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 0 -i $(animdir)/%06d.png -vf "palettegen=stats_mode=diff" -y "$(animdir)/palette.bmp"`)
|
||||||
# then apply the palette to get better results
|
# then apply the palette to get better results
|
||||||
ffmpeg_exe(` -v 0 -framerate $fps -loop $loop -i $(animdir)/%06d.png -i "$(animdir)/palette.bmp" -lavfi "paletteuse=dither=sierra2_4a" -y $fn`)
|
ffmpeg_exe(` -v 0 -framerate $framerate -loop $loop -i $(animdir)/%06d.png -i "$(animdir)/palette.bmp" -lavfi "paletteuse=dither=sierra2_4a" -y $fn`)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
ffmpeg_exe(`-v 0 -framerate $fps -loop $loop -i $(animdir)/%06d.png -pix_fmt yuv420p -y $fn`)
|
ffmpeg_exe(`-v 0 -framerate $framerate -loop $loop -i $(animdir)/%06d.png -pix_fmt yuv420p -y $fn`)
|
||||||
end
|
end
|
||||||
|
|
||||||
show_msg && @info("Saved animation to ", fn)
|
show_msg && @info("Saved animation to ", fn)
|
||||||
@@ -101,13 +104,18 @@ end
|
|||||||
# write out html to view the gif
|
# write out html to view the gif
|
||||||
function Base.show(io::IO, ::MIME"text/html", agif::AnimatedGif)
|
function Base.show(io::IO, ::MIME"text/html", agif::AnimatedGif)
|
||||||
ext = file_extension(agif.filename)
|
ext = file_extension(agif.filename)
|
||||||
write(io, if ext == "gif"
|
if ext == "gif"
|
||||||
"<img src=\"$(relpath(agif.filename))\" />"
|
html = "<img src=\"data:image/gif;base64," * base64encode(read(agif.filename)) * "\" />"
|
||||||
elseif ext in ("mov", "mp4")
|
elseif ext in ("mov", "mp4")
|
||||||
"<video controls><source src=\"$(relpath(agif.filename)) type=\"video/$ext\"></video>"
|
mimetype = ext == "mov" ? "video/quicktime" : "video/mp4"
|
||||||
|
html = "<video controls><source src=\"data:$mimetype;base64," *
|
||||||
|
base64encode(read(agif.filename)) *
|
||||||
|
"\" type = \"$mimetype\"></video>"
|
||||||
else
|
else
|
||||||
error("Cannot show animation with extension $ext: $agif")
|
error("Cannot show animation with extension $ext: $agif")
|
||||||
end)
|
end
|
||||||
|
|
||||||
|
write(io, html)
|
||||||
return nothing
|
return nothing
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
+9
-1
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
const _arg_desc = Dict{Symbol,String}(
|
const _arg_desc = KW(
|
||||||
|
|
||||||
# series args
|
# series args
|
||||||
:label => "String type. The label for a series, which appears in a legend. If empty, no legend entry is added.",
|
:label => "String type. The label for a series, which appears in a legend. If empty, no legend entry is added.",
|
||||||
@@ -42,6 +42,7 @@ const _arg_desc = Dict{Symbol,String}(
|
|||||||
:arrow => "nothing (no arrows), Bool (if true, default arrows), Arrow object, or arg(s) that could be style or head length/widths. Defines arrowheads that should be displayed at the end of path line segments (just before a NaN and the last non-NaN point). Used in quiverplot, streamplot, or similar.",
|
:arrow => "nothing (no arrows), Bool (if true, default arrows), Arrow object, or arg(s) that could be style or head length/widths. Defines arrowheads that should be displayed at the end of path line segments (just before a NaN and the last non-NaN point). Used in quiverplot, streamplot, or similar.",
|
||||||
:normalize => "Bool or Symbol. Histogram normalization mode. Possible values are: false/:none (no normalization, default), true/:pdf (normalize to a discrete Probability Density Function, where the total area of the bins is 1), :probability (bin heights sum to 1) and :density (the area of each bin, rather than the height, is equal to the counts - useful for uneven bin sizes).",
|
:normalize => "Bool or Symbol. Histogram normalization mode. Possible values are: false/:none (no normalization, default), true/:pdf (normalize to a discrete Probability Density Function, where the total area of the bins is 1), :probability (bin heights sum to 1) and :density (the area of each bin, rather than the height, is equal to the counts - useful for uneven bin sizes).",
|
||||||
:weights => "AbstractVector. Used in histogram types for weighted counts.",
|
:weights => "AbstractVector. Used in histogram types for weighted counts.",
|
||||||
|
:show_empty_bins => "Bool. Whether empty bins in a 2D histogram are colored as 0 (true), or transparent (the default).",
|
||||||
:contours => "Bool. Add contours to the side-grids of 3D plots? Used in surface/wireframe.",
|
:contours => "Bool. Add contours to the side-grids of 3D plots? Used in surface/wireframe.",
|
||||||
:contour_labels => "Bool. Show labels at the contour lines?",
|
:contour_labels => "Bool. Show labels at the contour lines?",
|
||||||
:match_dimensions => "Bool. For heatmap types... should the first dimension of a matrix (rows) correspond to the first dimension of the plot (x-axis)? The default is false, which matches the behavior of Matplotlib, Plotly, and others. Note: when passing a function for z, the function should still map `(x,y) -> z`.",
|
:match_dimensions => "Bool. For heatmap types... should the first dimension of a matrix (rows) correspond to the first dimension of the plot (x-axis)? The default is false, which matches the behavior of Matplotlib, Plotly, and others. Note: when passing a function for z, the function should still map `(x,y) -> z`.",
|
||||||
@@ -95,9 +96,16 @@ const _arg_desc = Dict{Symbol,String}(
|
|||||||
:legendfontvalign => "Symbol. Font vertical alignment of legend entries: :vcenter, :top, :bottom or :center",
|
:legendfontvalign => "Symbol. Font vertical alignment of legend entries: :vcenter, :top, :bottom or :center",
|
||||||
:legendfontrotation => "Real. Font rotation of legend entries",
|
:legendfontrotation => "Real. Font rotation of legend entries",
|
||||||
:legendfontcolor => "Color Type. Font color of legend entries",
|
:legendfontcolor => "Color Type. Font color of legend entries",
|
||||||
|
:legendtitlefontfamily => "String or Symbol. Font family of the legend title.",
|
||||||
|
:legendtitlefontsize => "Integer. Font pointsize the legend title.",
|
||||||
|
:legendtitlefonthalign => "Symbol. Font horizontal alignment of the legend title: :hcenter, :left, :right or :center",
|
||||||
|
:legendtitlefontvalign => "Symbol. Font vertical alignment of the legend title: :vcenter, :top, :bottom or :center",
|
||||||
|
:legendtitlefontrotation => "Real. Font rotation of the legend title",
|
||||||
|
:legendtitlefontcolor => "Color Type. Font color of the legend title",
|
||||||
:colorbar => "Bool (show the colorbar?) or Symbol (colorbar position). Symbol values: `:none`, `:best`, `:right`, `:left`, `:top`, `:bottom`, `:legend` (matches legend value) (note: only some may be supported in each backend)",
|
:colorbar => "Bool (show the colorbar?) or Symbol (colorbar position). Symbol values: `:none`, `:best`, `:right`, `:left`, `:top`, `:bottom`, `:legend` (matches legend value) (note: only some may be supported in each backend)",
|
||||||
:clims => "`:auto` or NTuple{2,Number}. Fixes the limits of the colorbar.",
|
:clims => "`:auto` or NTuple{2,Number}. Fixes the limits of the colorbar.",
|
||||||
:legendfont => "Font. Font of legend items.",
|
:legendfont => "Font. Font of legend items.",
|
||||||
|
:legendtitlefont => "Font. Font of the legend title.",
|
||||||
:annotations => "(x,y,text) tuple(s). Can be a single tuple or a list of them. Text can be String or PlotText (created with `text(args...)`) Add one-off text annotations at the x,y coordinates.",
|
:annotations => "(x,y,text) tuple(s). Can be a single tuple or a list of them. Text can be String or PlotText (created with `text(args...)`) Add one-off text annotations at the x,y coordinates.",
|
||||||
:projection => "Symbol or String. '3d' or 'polar'",
|
:projection => "Symbol or String. '3d' or 'polar'",
|
||||||
:aspect_ratio => "Symbol (:equal) or Number. Plot area is resized so that 1 y-unit is the same size as `aspect_ratio` x-units.",
|
:aspect_ratio => "Symbol (:equal) or Number. Plot area is resized so that 1 y-unit is the same size as `aspect_ratio` x-units.",
|
||||||
|
|||||||
+71
-51
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
const _keyAliases = Dict{Symbol,Symbol}()
|
const _keyAliases = Dict{Symbol,Symbol}()
|
||||||
|
|
||||||
@noinline function add_aliases(sym::Symbol, aliases::Symbol...)
|
function add_aliases(sym::Symbol, aliases::Symbol...)
|
||||||
for alias in aliases
|
for alias in aliases
|
||||||
if haskey(_keyAliases, alias)
|
if haskey(_keyAliases, alias)
|
||||||
error("Already an alias $alias => $(_keyAliases[alias])... can't also alias $sym")
|
error("Already an alias $alias => $(_keyAliases[alias])... can't also alias $sym")
|
||||||
@@ -11,7 +11,7 @@ const _keyAliases = Dict{Symbol,Symbol}()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline function add_non_underscore_aliases!(aliases::Dict{Symbol,Symbol})
|
function add_non_underscore_aliases!(aliases::Dict{Symbol,Symbol})
|
||||||
for (k,v) in aliases
|
for (k,v) in aliases
|
||||||
s = string(k)
|
s = string(k)
|
||||||
if '_' in s
|
if '_' in s
|
||||||
@@ -84,17 +84,17 @@ const _histogram_like = [:histogram, :barhist, :barbins]
|
|||||||
const _line_like = [:line, :path, :steppre, :steppost]
|
const _line_like = [:line, :path, :steppre, :steppost]
|
||||||
const _surface_like = [:contour, :contourf, :contour3d, :heatmap, :surface, :wireframe, :image]
|
const _surface_like = [:contour, :contourf, :contour3d, :heatmap, :surface, :wireframe, :image]
|
||||||
|
|
||||||
@noinline like_histogram(seriestype::Symbol) = seriestype in _histogram_like
|
like_histogram(seriestype::Symbol) = seriestype in _histogram_like
|
||||||
@noinline like_line(seriestype::Symbol) = seriestype in _line_like
|
like_line(seriestype::Symbol) = seriestype in _line_like
|
||||||
@noinline like_surface(seriestype::Symbol) = seriestype in _surface_like
|
like_surface(seriestype::Symbol) = seriestype in _surface_like
|
||||||
|
|
||||||
@noinline is3d(seriestype::Symbol) = seriestype in _3dTypes
|
is3d(seriestype::Symbol) = seriestype in _3dTypes
|
||||||
@noinline is3d(series::Series) = is3d(series.plotattributes)
|
is3d(series::Series) = is3d(series.plotattributes)
|
||||||
@noinline is3d(plotattributes::KW) = trueOrAllTrue(is3d, Symbol(plotattributes[:seriestype]))
|
is3d(plotattributes::KW) = trueOrAllTrue(is3d, Symbol(plotattributes[:seriestype]))
|
||||||
|
|
||||||
@noinline is3d(sp::Subplot) = string(sp.attr[:projection]) == "3d"
|
is3d(sp::Subplot) = string(sp.attr[:projection]) == "3d"
|
||||||
@noinline ispolar(sp::Subplot) = string(sp.attr[:projection]) == "polar"
|
ispolar(sp::Subplot) = string(sp.attr[:projection]) == "polar"
|
||||||
@noinline ispolar(series::Series) = ispolar(series.plotattributes[:subplot])
|
ispolar(series::Series) = ispolar(series.plotattributes[:subplot])
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
|
|
||||||
@@ -188,9 +188,9 @@ const _allGridSyms = [:x, :y, :z,
|
|||||||
:all, :both, :on, :yes, :show,
|
:all, :both, :on, :yes, :show,
|
||||||
:none, :off, :no, :hide]
|
:none, :off, :no, :hide]
|
||||||
const _allGridArgs = [_allGridSyms; string.(_allGridSyms); nothing]
|
const _allGridArgs = [_allGridSyms; string.(_allGridSyms); nothing]
|
||||||
@noinline hasgrid(arg::Nothing, letter) = false
|
hasgrid(arg::Nothing, letter) = false
|
||||||
@noinline hasgrid(arg::Bool, letter) = arg
|
hasgrid(arg::Bool, letter) = arg
|
||||||
@noinline function hasgrid(arg::Symbol, letter)
|
function hasgrid(arg::Symbol, letter)
|
||||||
if arg in _allGridSyms
|
if arg in _allGridSyms
|
||||||
arg in (:all, :both, :on) || occursin(string(letter), string(arg))
|
arg in (:all, :both, :on) || occursin(string(letter), string(arg))
|
||||||
else
|
else
|
||||||
@@ -198,7 +198,7 @@ const _allGridArgs = [_allGridSyms; string.(_allGridSyms); nothing]
|
|||||||
true
|
true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@noinline hasgrid(arg::AbstractString, letter) = hasgrid(Symbol(arg), letter)
|
hasgrid(arg::AbstractString, letter) = hasgrid(Symbol(arg), letter)
|
||||||
|
|
||||||
const _allShowaxisSyms = [:x, :y, :z,
|
const _allShowaxisSyms = [:x, :y, :z,
|
||||||
:xy, :xz, :yx, :yz, :zx, :zy,
|
:xy, :xz, :yx, :yz, :zx, :zy,
|
||||||
@@ -206,9 +206,9 @@ const _allShowaxisSyms = [:x, :y, :z,
|
|||||||
:all, :both, :on, :yes, :show,
|
:all, :both, :on, :yes, :show,
|
||||||
:off, :no, :hide]
|
:off, :no, :hide]
|
||||||
const _allShowaxisArgs = [_allGridSyms; string.(_allGridSyms)]
|
const _allShowaxisArgs = [_allGridSyms; string.(_allGridSyms)]
|
||||||
@noinline showaxis(arg::Nothing, letter) = false
|
showaxis(arg::Nothing, letter) = false
|
||||||
@noinline showaxis(arg::Bool, letter) = arg
|
showaxis(arg::Bool, letter) = arg
|
||||||
@noinline function showaxis(arg::Symbol, letter)
|
function showaxis(arg::Symbol, letter)
|
||||||
if arg in _allGridSyms
|
if arg in _allGridSyms
|
||||||
arg in (:all, :both, :on, :yes) || occursin(string(letter), string(arg))
|
arg in (:all, :both, :on, :yes) || occursin(string(letter), string(arg))
|
||||||
else
|
else
|
||||||
@@ -216,7 +216,7 @@ const _allShowaxisArgs = [_allGridSyms; string.(_allGridSyms)]
|
|||||||
true
|
true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@noinline showaxis(arg::AbstractString, letter) = hasgrid(Symbol(arg), letter)
|
showaxis(arg::AbstractString, letter) = hasgrid(Symbol(arg), letter)
|
||||||
|
|
||||||
const _allFramestyles = [:box, :semi, :axes, :origin, :zerolines, :grid, :none]
|
const _allFramestyles = [:box, :semi, :axes, :origin, :zerolines, :grid, :none]
|
||||||
const _framestyleAliases = Dict{Symbol, Symbol}(
|
const _framestyleAliases = Dict{Symbol, Symbol}(
|
||||||
@@ -272,6 +272,7 @@ const _series_defaults = KW(
|
|||||||
:arrow => nothing, # allows for adding arrows to line/path... call `arrow(args...)`
|
:arrow => nothing, # allows for adding arrows to line/path... call `arrow(args...)`
|
||||||
:normalize => false, # do we want a normalized histogram?
|
:normalize => false, # do we want a normalized histogram?
|
||||||
:weights => nothing, # optional weights for histograms (1D and 2D)
|
:weights => nothing, # optional weights for histograms (1D and 2D)
|
||||||
|
:show_empty_bins => false, # should empty bins in 2D histogram be colored as zero (otherwise they are transparent)
|
||||||
:contours => false, # add contours to 3d surface and wireframe plots
|
:contours => false, # add contours to 3d surface and wireframe plots
|
||||||
:contour_labels => false,
|
:contour_labels => false,
|
||||||
:match_dimensions => false, # do rows match x (true) or y (false) for heatmap/image/spy? see issue 196
|
:match_dimensions => false, # do rows match x (true) or y (false) for heatmap/image/spy? see issue 196
|
||||||
@@ -336,6 +337,12 @@ const _subplot_defaults = KW(
|
|||||||
:legendfontvalign => :vcenter,
|
:legendfontvalign => :vcenter,
|
||||||
:legendfontrotation => 0.0,
|
:legendfontrotation => 0.0,
|
||||||
:legendfontcolor => :match,
|
:legendfontcolor => :match,
|
||||||
|
:legendtitlefontfamily => :match,
|
||||||
|
:legendtitlefontsize => 11,
|
||||||
|
:legendtitlefonthalign => :hcenter,
|
||||||
|
:legendtitlefontvalign => :vcenter,
|
||||||
|
:legendtitlefontrotation => 0.0,
|
||||||
|
:legendtitlefontcolor => :match,
|
||||||
:annotations => [], # annotation tuples... list of (x,y,annotation)
|
:annotations => [], # annotation tuples... list of (x,y,annotation)
|
||||||
:projection => :none, # can also be :polar or :3d
|
:projection => :none, # can also be :polar or :3d
|
||||||
:aspect_ratio => :none, # choose from :none or :equal
|
:aspect_ratio => :none, # choose from :none or :equal
|
||||||
@@ -448,8 +455,9 @@ const _initial_defaults = deepcopy(_all_defaults)
|
|||||||
const _initial_axis_defaults = deepcopy(_axis_defaults)
|
const _initial_axis_defaults = deepcopy(_axis_defaults)
|
||||||
|
|
||||||
# to be able to reset font sizes to initial values
|
# to be able to reset font sizes to initial values
|
||||||
const _initial_fontsizes = Dict{Any,Any}(:titlefontsize => _subplot_defaults[:titlefontsize],
|
const _initial_fontsizes = Dict(:titlefontsize => _subplot_defaults[:titlefontsize],
|
||||||
:legendfontsize => _subplot_defaults[:legendfontsize],
|
:legendfontsize => _subplot_defaults[:legendfontsize],
|
||||||
|
:legendtitlefontsize => _subplot_defaults[:legendtitlefontsize],
|
||||||
:tickfontsize => _axis_defaults[:tickfontsize],
|
:tickfontsize => _axis_defaults[:tickfontsize],
|
||||||
:guidefontsize => _axis_defaults[:guidefontsize])
|
:guidefontsize => _axis_defaults[:guidefontsize])
|
||||||
|
|
||||||
@@ -459,15 +467,15 @@ RecipesBase.is_key_supported(k::Symbol) = is_attr_supported(k)
|
|||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
@noinline makeplural(s::Symbol) = Symbol(string(s,"s"))
|
makeplural(s::Symbol) = Symbol(string(s,"s"))
|
||||||
|
|
||||||
@noinline autopick(arr::AVec, idx::Integer) = arr[mod1(idx,length(arr))]
|
autopick(arr::AVec, idx::Integer) = arr[mod1(idx,length(arr))]
|
||||||
@noinline autopick(notarr, idx::Integer) = notarr
|
autopick(notarr, idx::Integer) = notarr
|
||||||
|
|
||||||
@noinline autopick_ignore_none_auto(arr::AVec, idx::Integer) = autopick(setdiff(arr, [:none, :auto]), idx)
|
autopick_ignore_none_auto(arr::AVec, idx::Integer) = autopick(setdiff(arr, [:none, :auto]), idx)
|
||||||
@noinline autopick_ignore_none_auto(notarr, idx::Integer) = notarr
|
autopick_ignore_none_auto(notarr, idx::Integer) = notarr
|
||||||
|
|
||||||
@noinline function aliasesAndAutopick(plotattributes::KW, sym::Symbol, aliases::Dict{Symbol,Symbol}, options::AVec, plotIndex::Int)
|
function aliasesAndAutopick(plotattributes::KW, sym::Symbol, aliases::Dict{Symbol,Symbol}, options::AVec, plotIndex::Int)
|
||||||
if plotattributes[sym] == :auto
|
if plotattributes[sym] == :auto
|
||||||
plotattributes[sym] = autopick_ignore_none_auto(options, plotIndex)
|
plotattributes[sym] = autopick_ignore_none_auto(options, plotIndex)
|
||||||
elseif haskey(aliases, plotattributes[sym])
|
elseif haskey(aliases, plotattributes[sym])
|
||||||
@@ -475,7 +483,7 @@ RecipesBase.is_key_supported(k::Symbol) = is_attr_supported(k)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline function aliases(aliasMap::Dict{Symbol,Symbol}, val)
|
function aliases(aliasMap::Dict{Symbol,Symbol}, val)
|
||||||
sortedkeys(filter((k,v)-> v==val, aliasMap))
|
sortedkeys(filter((k,v)-> v==val, aliasMap))
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -574,6 +582,7 @@ add_aliases(:xerror, :xerr, :xerrorbar)
|
|||||||
add_aliases(:yerror, :yerr, :yerrorbar, :err, :errorbar)
|
add_aliases(:yerror, :yerr, :yerrorbar, :err, :errorbar)
|
||||||
add_aliases(:quiver, :velocity, :quiver2d, :gradient, :vectorfield)
|
add_aliases(:quiver, :velocity, :quiver2d, :gradient, :vectorfield)
|
||||||
add_aliases(:normalize, :norm, :normed, :normalized)
|
add_aliases(:normalize, :norm, :normed, :normalized)
|
||||||
|
add_aliases(:show_empty_bins, :showemptybins, :showempty, :show_empty)
|
||||||
add_aliases(:aspect_ratio, :aspectratio, :axis_ratio, :axisratio, :ratio)
|
add_aliases(:aspect_ratio, :aspectratio, :axis_ratio, :axisratio, :ratio)
|
||||||
add_aliases(:match_dimensions, :transpose, :transpose_z)
|
add_aliases(:match_dimensions, :transpose, :transpose_z)
|
||||||
add_aliases(:subplot, :sp, :subplt, :splt)
|
add_aliases(:subplot, :sp, :subplt, :splt)
|
||||||
@@ -879,9 +888,9 @@ function processFontArg!(plotattributes::KW, fontname::Symbol, arg)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline _replace_markershape(shape::Symbol) = get(_markerAliases, shape, shape)
|
_replace_markershape(shape::Symbol) = get(_markerAliases, shape, shape)
|
||||||
@noinline _replace_markershape(shapes::AVec) = map(_replace_markershape, shapes)
|
_replace_markershape(shapes::AVec) = map(_replace_markershape, shapes)
|
||||||
@noinline _replace_markershape(shape) = shape
|
_replace_markershape(shape) = shape
|
||||||
|
|
||||||
function _add_markershape(plotattributes::KW)
|
function _add_markershape(plotattributes::KW)
|
||||||
# add the markershape if it needs to be added... hack to allow "m=10" to add a shape,
|
# add the markershape if it needs to be added... hack to allow "m=10" to add a shape,
|
||||||
@@ -930,6 +939,15 @@ function preprocessArgs!(plotattributes::KW)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# vline accesses the y argument but actually maps it to the x axis.
|
||||||
|
# Hence, we have to swap formatters
|
||||||
|
if get(plotattributes, :seriestype, :path) == :vline
|
||||||
|
xformatter = get(plotattributes, :xformatter, :auto)
|
||||||
|
yformatter = get(plotattributes, :yformatter, :auto)
|
||||||
|
plotattributes[:xformatter] = yformatter
|
||||||
|
plotattributes[:yformatter] = xformatter
|
||||||
|
end
|
||||||
|
|
||||||
# handle grid args common to all axes
|
# handle grid args common to all axes
|
||||||
args = pop!(plotattributes, :grid, ())
|
args = pop!(plotattributes, :grid, ())
|
||||||
for arg in wraptuple(args)
|
for arg in wraptuple(args)
|
||||||
@@ -961,7 +979,7 @@ function preprocessArgs!(plotattributes::KW)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
# fonts
|
# fonts
|
||||||
for fontname in (:titlefont, :legendfont)
|
for fontname in (:titlefont, :legendfont, :legendtitlefont)
|
||||||
args = pop!(plotattributes, fontname, ())
|
args = pop!(plotattributes, fontname, ())
|
||||||
for arg in wraptuple(args)
|
for arg in wraptuple(args)
|
||||||
processFontArg!(plotattributes, fontname, arg)
|
processFontArg!(plotattributes, fontname, arg)
|
||||||
@@ -1074,7 +1092,7 @@ end
|
|||||||
|
|
||||||
|
|
||||||
# this is when given a vector-type of values to group by
|
# this is when given a vector-type of values to group by
|
||||||
@noinline function extractGroupArgs(v::AVec, args...; legendEntry = string)
|
function extractGroupArgs(v::AVec, args...; legendEntry = string)
|
||||||
groupLabels = sort(collect(unique(v)))
|
groupLabels = sort(collect(unique(v)))
|
||||||
n = length(groupLabels)
|
n = length(groupLabels)
|
||||||
if n > 100
|
if n > 100
|
||||||
@@ -1084,17 +1102,17 @@ end
|
|||||||
GroupBy(map(legendEntry, groupLabels), groupIds)
|
GroupBy(map(legendEntry, groupLabels), groupIds)
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline legendEntryFromTuple(ns::Tuple) = join(ns, ' ')
|
legendEntryFromTuple(ns::Tuple) = join(ns, ' ')
|
||||||
|
|
||||||
# this is when given a tuple of vectors of values to group by
|
# this is when given a tuple of vectors of values to group by
|
||||||
@noinline function extractGroupArgs(vs::Tuple, args...)
|
function extractGroupArgs(vs::Tuple, args...)
|
||||||
isempty(vs) && return GroupBy([""], [1:size(args[1],1)])
|
isempty(vs) && return GroupBy([""], [1:size(args[1],1)])
|
||||||
v = map(tuple, vs...)
|
v = map(tuple, vs...)
|
||||||
extractGroupArgs(v, args...; legendEntry = legendEntryFromTuple)
|
extractGroupArgs(v, args...; legendEntry = legendEntryFromTuple)
|
||||||
end
|
end
|
||||||
|
|
||||||
# allow passing NamedTuples for a named legend entry
|
# allow passing NamedTuples for a named legend entry
|
||||||
@noinline legendEntryFromTuple(ns::NamedTuple) =
|
legendEntryFromTuple(ns::NamedTuple) =
|
||||||
join(["$k = $v" for (k, v) in pairs(ns)], ", ")
|
join(["$k = $v" for (k, v) in pairs(ns)], ", ")
|
||||||
|
|
||||||
function extractGroupArgs(vs::NamedTuple, args...)
|
function extractGroupArgs(vs::NamedTuple, args...)
|
||||||
@@ -1104,22 +1122,22 @@ function extractGroupArgs(vs::NamedTuple, args...)
|
|||||||
end
|
end
|
||||||
|
|
||||||
# expecting a mapping of "group label" to "group indices"
|
# expecting a mapping of "group label" to "group indices"
|
||||||
@noinline function extractGroupArgs(idxmap::Dict{T,V}, args...) where {T, V<:AVec{Int}}
|
function extractGroupArgs(idxmap::Dict{T,V}, args...) where {T, V<:AVec{Int}}
|
||||||
groupLabels = sortedkeys(idxmap)
|
groupLabels = sortedkeys(idxmap)
|
||||||
groupIds = Vector{Int}[collect(idxmap[k]) for k in groupLabels]
|
groupIds = Vector{Int}[collect(idxmap[k]) for k in groupLabels]
|
||||||
GroupBy(groupLabels, groupIds)
|
GroupBy(groupLabels, groupIds)
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline filter_data(v::AVec, idxfilter::AVec{Int}) = v[idxfilter]
|
filter_data(v::AVec, idxfilter::AVec{Int}) = v[idxfilter]
|
||||||
@noinline filter_data(v, idxfilter) = v
|
filter_data(v, idxfilter) = v
|
||||||
|
|
||||||
@noinline function filter_data!(plotattributes::KW, idxfilter)
|
function filter_data!(plotattributes::KW, idxfilter)
|
||||||
for s in (:x, :y, :z)
|
for s in (:x, :y, :z)
|
||||||
plotattributes[s] = filter_data(get(plotattributes, s, nothing), idxfilter)
|
plotattributes[s] = filter_data(get(plotattributes, s, nothing), idxfilter)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline function _filter_input_data!(plotattributes::KW)
|
function _filter_input_data!(plotattributes::KW)
|
||||||
idxfilter = pop!(plotattributes, :idxfilter, nothing)
|
idxfilter = pop!(plotattributes, :idxfilter, nothing)
|
||||||
if idxfilter !== nothing
|
if idxfilter !== nothing
|
||||||
filter_data!(plotattributes, idxfilter)
|
filter_data!(plotattributes, idxfilter)
|
||||||
@@ -1182,7 +1200,7 @@ end
|
|||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
@noinline function convertLegendValue(val::Symbol)
|
function convertLegendValue(val::Symbol)
|
||||||
if val in (:both, :all, :yes)
|
if val in (:both, :all, :yes)
|
||||||
:best
|
:best
|
||||||
elseif val in (:no, :none)
|
elseif val in (:no, :none)
|
||||||
@@ -1193,10 +1211,10 @@ end
|
|||||||
error("Invalid symbol for legend: $val")
|
error("Invalid symbol for legend: $val")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@noinline convertLegendValue(val::Bool) = val ? :best : :none
|
convertLegendValue(val::Bool) = val ? :best : :none
|
||||||
@noinline convertLegendValue(val::Nothing) = :none
|
convertLegendValue(val::Nothing) = :none
|
||||||
@noinline convertLegendValue(v::Tuple{S,T}) where {S<:Real, T<:Real} = v
|
convertLegendValue(v::Tuple{S,T}) where {S<:Real, T<:Real} = v
|
||||||
@noinline convertLegendValue(v::AbstractArray) = map(convertLegendValue, v)
|
convertLegendValue(v::AbstractArray) = map(convertLegendValue, v)
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -1205,12 +1223,12 @@ end
|
|||||||
# multi-row matrices will give a column
|
# multi-row matrices will give a column
|
||||||
# InputWrapper just gives the contents
|
# InputWrapper just gives the contents
|
||||||
# anything else is returned as-is
|
# anything else is returned as-is
|
||||||
@noinline function slice_arg(v::AMat, idx::Int)
|
function slice_arg(v::AMat, idx::Int)
|
||||||
c = mod1(idx, size(v,2))
|
c = mod1(idx, size(v,2))
|
||||||
size(v,1) == 1 ? v[1,c] : v[:,c]
|
size(v,1) == 1 ? v[1,c] : v[:,c]
|
||||||
end
|
end
|
||||||
@noinline slice_arg(wrapper::InputWrapper, idx) = wrapper.obj
|
slice_arg(wrapper::InputWrapper, idx) = wrapper.obj
|
||||||
@noinline slice_arg(v, idx) = v
|
slice_arg(v, idx) = v
|
||||||
|
|
||||||
|
|
||||||
# given an argument key (k), we want to extract the argument value for this index.
|
# given an argument key (k), we want to extract the argument value for this index.
|
||||||
@@ -1271,8 +1289,10 @@ const _match_map = KW(
|
|||||||
:bottom_margin => :margin,
|
:bottom_margin => :margin,
|
||||||
:titlefontfamily => :fontfamily_subplot,
|
:titlefontfamily => :fontfamily_subplot,
|
||||||
:legendfontfamily => :fontfamily_subplot,
|
:legendfontfamily => :fontfamily_subplot,
|
||||||
|
:legendtitlefontfamily => :fontfamily_subplot,
|
||||||
:titlefontcolor => :foreground_color_subplot,
|
:titlefontcolor => :foreground_color_subplot,
|
||||||
:legendfontcolor => :foreground_color_subplot,
|
:legendfontcolor => :foreground_color_subplot,
|
||||||
|
:legendtitlefontcolor => :foreground_color_subplot,
|
||||||
:tickfontcolor => :foreground_color_text,
|
:tickfontcolor => :foreground_color_text,
|
||||||
:guidefontcolor => :foreground_color_guide,
|
:guidefontcolor => :foreground_color_guide,
|
||||||
)
|
)
|
||||||
@@ -1509,9 +1529,9 @@ end
|
|||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
@noinline has_black_border_for_default(st) = error("The seriestype attribute only accepts Symbols, you passed the $(typeof(st)) $st.")
|
has_black_border_for_default(st) = error("The seriestype attribute only accepts Symbols, you passed the $(typeof(st)) $st.")
|
||||||
@noinline has_black_border_for_default(st::Function) = error("The seriestype attribute only accepts Symbols, you passed the function $st.")
|
has_black_border_for_default(st::Function) = error("The seriestype attribute only accepts Symbols, you passed the function $st.")
|
||||||
@noinline function has_black_border_for_default(st::Symbol)
|
function has_black_border_for_default(st::Symbol)
|
||||||
like_histogram(st) || st in (:hexbin, :bar, :shape)
|
like_histogram(st) || st in (:hexbin, :bar, :shape)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
+4
-2
@@ -218,6 +218,8 @@ function optimal_ticks_and_labels(sp::Subplot, axis::Axis, ticks = nothing)
|
|||||||
map(labelfunc(scale, backend()), Showoff.showoff(scaled_ticks, :plain))
|
map(labelfunc(scale, backend()), Showoff.showoff(scaled_ticks, :plain))
|
||||||
elseif formatter == :scientific
|
elseif formatter == :scientific
|
||||||
Showoff.showoff(unscaled_ticks, :scientific)
|
Showoff.showoff(unscaled_ticks, :scientific)
|
||||||
|
elseif formatter == :latex
|
||||||
|
map(x -> string("\$", replace(convert_sci_unicode(x), '×' => "\\times"), "\$"), Showoff.showoff(unscaled_ticks, :auto))
|
||||||
else
|
else
|
||||||
# there was an override for the formatter... use that on the unscaled ticks
|
# there was an override for the formatter... use that on the unscaled ticks
|
||||||
map(formatter, unscaled_ticks)
|
map(formatter, unscaled_ticks)
|
||||||
@@ -295,7 +297,7 @@ function get_minor_ticks(sp, axis, ticks)
|
|||||||
#Add one phantom tick either side of the ticks to ensure minor ticks extend to the axis limits
|
#Add one phantom tick either side of the ticks to ensure minor ticks extend to the axis limits
|
||||||
if length(ticks) > 2
|
if length(ticks) > 2
|
||||||
ratio = (ticks[3] - ticks[2])/(ticks[2] - ticks[1])
|
ratio = (ticks[3] - ticks[2])/(ticks[2] - ticks[1])
|
||||||
elseif axis[:scale] == :none
|
elseif axis[:scale] in (:none, :identity)
|
||||||
ratio = 1
|
ratio = 1
|
||||||
else
|
else
|
||||||
return nothing
|
return nothing
|
||||||
@@ -754,5 +756,5 @@ function axis_drawing_info(sp::Subplot)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Any[xticks, yticks, xaxis_segs, yaxis_segs, xtick_segs, ytick_segs, xgrid_segs, ygrid_segs, xminorgrid_segs, yminorgrid_segs, xborder_segs, yborder_segs]
|
xticks, yticks, xaxis_segs, yaxis_segs, xtick_segs, ytick_segs, xgrid_segs, ygrid_segs, xminorgrid_segs, yminorgrid_segs, xborder_segs, yborder_segs
|
||||||
end
|
end
|
||||||
|
|||||||
+20
-30
@@ -47,17 +47,17 @@ end
|
|||||||
# ---------------------------------------------------------
|
# ---------------------------------------------------------
|
||||||
|
|
||||||
# don't do anything as a default
|
# don't do anything as a default
|
||||||
@noinline _create_backend_figure(plt::Plot) = nothing
|
_create_backend_figure(plt::Plot) = nothing
|
||||||
@noinline _prepare_plot_object(plt::Plot) = nothing
|
_prepare_plot_object(plt::Plot) = nothing
|
||||||
@noinline _initialize_subplot(plt::Plot, sp::Subplot) = nothing
|
_initialize_subplot(plt::Plot, sp::Subplot) = nothing
|
||||||
|
|
||||||
@noinline _series_added(plt::Plot, series::Series) = nothing
|
_series_added(plt::Plot, series::Series) = nothing
|
||||||
@noinline _series_updated(plt::Plot, series::Series) = nothing
|
_series_updated(plt::Plot, series::Series) = nothing
|
||||||
|
|
||||||
@noinline _before_layout_calcs(plt::Plot) = nothing
|
_before_layout_calcs(plt::Plot) = nothing
|
||||||
|
|
||||||
@noinline title_padding(sp::Subplot) = sp[:title] == "" ? 0mm : sp[:titlefontsize] * pt
|
title_padding(sp::Subplot) = sp[:title] == "" ? 0mm : sp[:titlefontsize] * pt
|
||||||
@noinline guide_padding(axis::Axis) = axis[:guide] == "" ? 0mm : axis[:guidefontsize] * pt
|
guide_padding(axis::Axis) = axis[:guide] == "" ? 0mm : axis[:guidefontsize] * pt
|
||||||
|
|
||||||
"Returns the (width,height) of a text label."
|
"Returns the (width,height) of a text label."
|
||||||
function text_size(lablen::Int, sz::Number, rot::Number = 0)
|
function text_size(lablen::Int, sz::Number, rot::Number = 0)
|
||||||
@@ -123,32 +123,20 @@ function _update_min_padding!(sp::Subplot)
|
|||||||
sp.minpad = (leftpad, toppad, rightpad, bottompad)
|
sp.minpad = (leftpad, toppad, rightpad, bottompad)
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline _update_plot_object(plt::Plot) = nothing
|
_update_plot_object(plt::Plot) = nothing
|
||||||
|
|
||||||
# ---------------------------------------------------------
|
# ---------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
mutable struct CurrentBackend{sym,T}
|
mutable struct CurrentBackend
|
||||||
pkg::T
|
sym::Symbol
|
||||||
end
|
pkg::AbstractBackend
|
||||||
function CurrentBackend(sym::Symbol)
|
|
||||||
bkend = _backend_instance(sym)
|
|
||||||
CurrentBackend{sym,typeof(bkend)}(bkend)
|
|
||||||
end
|
|
||||||
|
|
||||||
function Base.getproperty(bkend::CurrentBackend{sym,T},x::Symbol) where {sym,T}
|
|
||||||
if x === :sym
|
|
||||||
return sym
|
|
||||||
elseif x === :pkg
|
|
||||||
return getfield(bkend,:pkg)
|
|
||||||
else
|
|
||||||
error("Must be sym or pkg")
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
CurrentBackend(sym::Symbol) = CurrentBackend(sym, _backend_instance(sym))
|
||||||
|
|
||||||
# ---------------------------------------------------------
|
# ---------------------------------------------------------
|
||||||
|
|
||||||
@noinline _fallback_default_backend() = backend(GRBackend())
|
_fallback_default_backend() = backend(GRBackend())
|
||||||
|
|
||||||
function _pick_default_backend()
|
function _pick_default_backend()
|
||||||
env_default = get(ENV, "PLOTS_DEFAULT_BACKEND", "")
|
env_default = get(ENV, "PLOTS_DEFAULT_BACKEND", "")
|
||||||
@@ -189,7 +177,8 @@ function backend(pkg::AbstractBackend)
|
|||||||
_initialize_backend(pkg)
|
_initialize_backend(pkg)
|
||||||
push!(_initialized_backends, sym)
|
push!(_initialized_backends, sym)
|
||||||
end
|
end
|
||||||
CURRENT_BACKEND = Plots.CurrentBackend(sym)
|
CURRENT_BACKEND.sym = sym
|
||||||
|
CURRENT_BACKEND.pkg = pkg
|
||||||
pkg
|
pkg
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -240,7 +229,7 @@ const _base_supported_args = [
|
|||||||
:subplot_index,
|
:subplot_index,
|
||||||
:discrete_values,
|
:discrete_values,
|
||||||
:projection,
|
:projection,
|
||||||
|
:show_empty_bins
|
||||||
]
|
]
|
||||||
|
|
||||||
function merge_with_base_supported(v::AVec)
|
function merge_with_base_supported(v::AVec)
|
||||||
@@ -305,8 +294,9 @@ function _initialize_backend(pkg::AbstractBackend)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline _initialize_backend(pkg::GRBackend) = nothing
|
_initialize_backend(pkg::GRBackend) = nothing
|
||||||
@noinline _initialize_backend(pkg::PlotlyBackend) = nothing
|
|
||||||
|
_initialize_backend(pkg::PlotlyBackend) = nothing
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|||||||
+545
-620
File diff suppressed because it is too large
Load Diff
+24
-12
@@ -128,16 +128,18 @@ function pgf_marker(plotattributes, i = 1)
|
|||||||
shape = _cycle(plotattributes[:markershape], i)
|
shape = _cycle(plotattributes[:markershape], i)
|
||||||
cstr, a = pgf_color(plot_color(get_markercolor(plotattributes, i), get_markeralpha(plotattributes, i)))
|
cstr, a = pgf_color(plot_color(get_markercolor(plotattributes, i), get_markeralpha(plotattributes, i)))
|
||||||
cstr_stroke, a_stroke = pgf_color(plot_color(get_markerstrokecolor(plotattributes, i), get_markerstrokealpha(plotattributes, i)))
|
cstr_stroke, a_stroke = pgf_color(plot_color(get_markerstrokecolor(plotattributes, i), get_markerstrokealpha(plotattributes, i)))
|
||||||
"""
|
return string(
|
||||||
mark = $(get(_pgfplots_markers, shape, "*")),
|
"mark = $(get(_pgfplots_markers, shape, "*")),\n",
|
||||||
mark size = $(pgf_thickness_scaling(plotattributes) * 0.5 * _cycle(plotattributes[:markersize], i)),
|
"mark size = $(pgf_thickness_scaling(plotattributes) * 0.5 * _cycle(plotattributes[:markersize], i)),\n",
|
||||||
mark options = {
|
plotattributes[:seriestype] == :scatter ? "only marks,\n" : "",
|
||||||
color = $cstr_stroke, draw opacity = $a_stroke,
|
"mark options = {
|
||||||
fill = $cstr, fill opacity = $a,
|
color = $cstr_stroke, draw opacity = $a_stroke,
|
||||||
line width = $(pgf_thickness_scaling(plotattributes) * _cycle(plotattributes[:markerstrokewidth], i)),
|
fill = $cstr, fill opacity = $a,
|
||||||
rotate = $(shape == :dtriangle ? 180 : 0),
|
line width = $(pgf_thickness_scaling(plotattributes) * _cycle(plotattributes[:markerstrokewidth], i)),
|
||||||
$(get(_pgfplots_linestyles, _cycle(plotattributes[:markerstrokestyle], i), "solid"))
|
rotate = $(shape == :dtriangle ? 180 : 0),
|
||||||
}"""
|
$(get(_pgfplots_linestyles, _cycle(plotattributes[:markerstrokestyle], i), "solid"))
|
||||||
|
}"
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
function pgf_add_annotation!(o, x, y, val, thickness_scaling = 1)
|
function pgf_add_annotation!(o, x, y, val, thickness_scaling = 1)
|
||||||
@@ -476,8 +478,18 @@ function _update_plot_object(plt::Plot{PGFPlotsBackend})
|
|||||||
if haskey(_pgfplots_legend_pos, legpos)
|
if haskey(_pgfplots_legend_pos, legpos)
|
||||||
kw[:legendPos] = _pgfplots_legend_pos[legpos]
|
kw[:legendPos] = _pgfplots_legend_pos[legpos]
|
||||||
end
|
end
|
||||||
cstr, a = pgf_color(plot_color(sp[:background_color_legend]))
|
cstr, bg_alpha = pgf_color(plot_color(sp[:background_color_legend]))
|
||||||
push!(style, string("legend style = {", pgf_linestyle(pgf_thickness_scaling(sp), sp[:foreground_color_legend], 1.0, "solid"), ",", "fill = $cstr,", "font = ", pgf_font(sp[:legendfontsize], pgf_thickness_scaling(sp)), "}"))
|
fg_alpha = alpha(plot_color(sp[:foreground_color_legend]))
|
||||||
|
|
||||||
|
push!(style, string(
|
||||||
|
"legend style = {",
|
||||||
|
pgf_linestyle(pgf_thickness_scaling(sp), sp[:foreground_color_legend], fg_alpha, "solid", ), ",",
|
||||||
|
"fill = $cstr,",
|
||||||
|
"fill opacity = $bg_alpha,",
|
||||||
|
"text opacity = $(alpha(plot_color(sp[:legendfontcolor]))),",
|
||||||
|
"font = ", pgf_font(sp[:legendfontsize], pgf_thickness_scaling(sp)),
|
||||||
|
"}",
|
||||||
|
))
|
||||||
|
|
||||||
if any(s[:seriestype] == :contour for s in series_list(sp))
|
if any(s[:seriestype] == :contour for s in series_list(sp))
|
||||||
kw[:view] = "{0}{90}"
|
kw[:view] = "{0}{90}"
|
||||||
|
|||||||
@@ -454,7 +454,7 @@ function plotly_series(plt::Plot, series::Series)
|
|||||||
st = series[:seriestype]
|
st = series[:seriestype]
|
||||||
|
|
||||||
sp = series[:subplot]
|
sp = series[:subplot]
|
||||||
clims = get_clims(sp)
|
clims = get_clims(sp, series)
|
||||||
|
|
||||||
if st == :shape
|
if st == :shape
|
||||||
return plotly_series_shapes(plt, series, clims)
|
return plotly_series_shapes(plt, series, clims)
|
||||||
@@ -469,7 +469,7 @@ function plotly_series(plt::Plot, series::Series)
|
|||||||
plotattributes_out[:showlegend] = should_add_to_legend(series)
|
plotattributes_out[:showlegend] = should_add_to_legend(series)
|
||||||
|
|
||||||
if st == :straightline
|
if st == :straightline
|
||||||
x, y = straightline_data(series)
|
x, y = straightline_data(series, 100)
|
||||||
z = series[:z]
|
z = series[:z]
|
||||||
else
|
else
|
||||||
x, y, z = series[:x], series[:y], series[:z]
|
x, y, z = series[:x], series[:y], series[:z]
|
||||||
@@ -584,7 +584,7 @@ function plotly_series_shapes(plt::Plot, series::Series, clims)
|
|||||||
)
|
)
|
||||||
|
|
||||||
x, y = (plotly_data(series, letter, data)
|
x, y = (plotly_data(series, letter, data)
|
||||||
for (letter, data) in zip((:x, :y), shape_data(series))
|
for (letter, data) in zip((:x, :y), shape_data(series, 100))
|
||||||
)
|
)
|
||||||
|
|
||||||
for (i,rng) in enumerate(segments)
|
for (i,rng) in enumerate(segments)
|
||||||
|
|||||||
+12
-8
@@ -399,7 +399,7 @@ function py_add_series(plt::Plot{PyPlotBackend}, series::Series)
|
|||||||
|
|
||||||
# handle zcolor and get c/cmap
|
# handle zcolor and get c/cmap
|
||||||
needs_colorbar = hascolorbar(sp)
|
needs_colorbar = hascolorbar(sp)
|
||||||
vmin, vmax = clims = get_clims(sp)
|
vmin, vmax = clims = get_clims(sp, series)
|
||||||
|
|
||||||
# Dict to store extra kwargs
|
# Dict to store extra kwargs
|
||||||
if st == :wireframe
|
if st == :wireframe
|
||||||
@@ -756,7 +756,7 @@ function py_add_series(plt::Plot{PyPlotBackend}, series::Series)
|
|||||||
cmap = py_colormap(cgrad([:black, :white])),
|
cmap = py_colormap(cgrad([:black, :white])),
|
||||||
vmin = 0.0,
|
vmin = 0.0,
|
||||||
vmax = 1.0,
|
vmax = 1.0,
|
||||||
extent = (xmin, xmax, ymax, ymin)
|
extent = (xmin-0.5, xmax+0.5, ymax+0.5, ymin-0.5)
|
||||||
)
|
)
|
||||||
push!(handles, handle)
|
push!(handles, handle)
|
||||||
|
|
||||||
@@ -927,7 +927,7 @@ function py_set_scale(ax, sp::Subplot, axis::Axis)
|
|||||||
elseif scale == :log10
|
elseif scale == :log10
|
||||||
10
|
10
|
||||||
end
|
end
|
||||||
kw[Symbol(:linthresh,letter)] = NaNMath.min(1e-16, py_compute_axis_minval(sp, axis))
|
kw[Symbol(:linthresh,letter)] = NaNMath.max(1e-16, py_compute_axis_minval(sp, axis))
|
||||||
"symlog"
|
"symlog"
|
||||||
end
|
end
|
||||||
func(arg; kw...)
|
func(arg; kw...)
|
||||||
@@ -1228,7 +1228,7 @@ end
|
|||||||
|
|
||||||
function py_add_annotations(sp::Subplot{PyPlotBackend}, x, y, val)
|
function py_add_annotations(sp::Subplot{PyPlotBackend}, x, y, val)
|
||||||
ax = sp.o
|
ax = sp.o
|
||||||
ax."annotate"(val, xy = (x,y), zorder = 999)
|
ax."annotate"(val, xy = (x,y), zorder = 999, annotation_clip = false)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@@ -1242,7 +1242,8 @@ function py_add_annotations(sp::Subplot{PyPlotBackend}, x, y, val::PlotText)
|
|||||||
verticalalignment = val.font.valign == :vcenter ? "center" : string(val.font.valign),
|
verticalalignment = val.font.valign == :vcenter ? "center" : string(val.font.valign),
|
||||||
rotation = val.font.rotation,
|
rotation = val.font.rotation,
|
||||||
size = py_thickness_scale(sp.plt, val.font.pointsize),
|
size = py_thickness_scale(sp.plt, val.font.pointsize),
|
||||||
zorder = 999
|
zorder = 999,
|
||||||
|
annotation_clip = false
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1289,13 +1290,13 @@ py_legend_bbox(pos) = pos
|
|||||||
|
|
||||||
function py_add_legend(plt::Plot, sp::Subplot, ax)
|
function py_add_legend(plt::Plot, sp::Subplot, ax)
|
||||||
leg = sp[:legend]
|
leg = sp[:legend]
|
||||||
clims = get_clims(sp)
|
|
||||||
if leg != :none
|
if leg != :none
|
||||||
# gotta do this to ensure both axes are included
|
# gotta do this to ensure both axes are included
|
||||||
labels = []
|
labels = []
|
||||||
handles = []
|
handles = []
|
||||||
for series in series_list(sp)
|
for series in series_list(sp)
|
||||||
if should_add_to_legend(series)
|
if should_add_to_legend(series)
|
||||||
|
clims = get_clims(sp, series)
|
||||||
# add a line/marker and a label
|
# add a line/marker and a label
|
||||||
push!(handles, if series[:seriestype] == :shape || series[:fillrange] !== nothing
|
push!(handles, if series[:seriestype] == :shape || series[:fillrange] !== nothing
|
||||||
pypatches."Patch"(
|
pypatches."Patch"(
|
||||||
@@ -1335,10 +1336,13 @@ function py_add_legend(plt::Plot, sp::Subplot, ax)
|
|||||||
frame = leg."get_frame"()
|
frame = leg."get_frame"()
|
||||||
frame."set_linewidth"(py_thickness_scale(plt, 1))
|
frame."set_linewidth"(py_thickness_scale(plt, 1))
|
||||||
leg."set_zorder"(1000)
|
leg."set_zorder"(1000)
|
||||||
sp[:legendtitle] !== nothing && leg."set_title"(sp[:legendtitle])
|
if sp[:legendtitle] !== nothing
|
||||||
|
leg."set_title"(sp[:legendtitle])
|
||||||
|
PyPlot.plt."setp"(leg."get_title"(), color = py_color(sp[:legendtitlefontcolor]), family = sp[:legendtitlefontfamily], fontsize = py_thickness_scale(plt, sp[:legendtitlefontsize]))
|
||||||
|
end
|
||||||
|
|
||||||
for txt in leg."get_texts"()
|
for txt in leg."get_texts"()
|
||||||
PyPlot.plt."setp"(txt, color = py_color(sp[:legendfontcolor]), family = sp[:legendfontfamily])
|
PyPlot.plt."setp"(txt, color = py_color(sp[:legendfontcolor]), family = sp[:legendfontfamily], fontsize = py_thickness_scale(plt, sp[:legendfontsize]))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
+2
-2
@@ -137,7 +137,7 @@ const _shape_keys = Symbol[
|
|||||||
:x,
|
:x,
|
||||||
]
|
]
|
||||||
|
|
||||||
const _shapes = Dict{Symbol,Shape}(
|
const _shapes = KW(
|
||||||
:circle => makeshape(20),
|
:circle => makeshape(20),
|
||||||
:rect => makeshape(4, offset=-0.25),
|
:rect => makeshape(4, offset=-0.25),
|
||||||
:diamond => makeshape(4),
|
:diamond => makeshape(4),
|
||||||
@@ -794,7 +794,7 @@ end
|
|||||||
|
|
||||||
@deprecate curve_points coords
|
@deprecate curve_points coords
|
||||||
|
|
||||||
coords(curve::BezierCurve, n::Integer = 30; range = [0,1]) = map(curve, range(range..., stop=n, length=50))
|
coords(curve::BezierCurve, n::Integer = 30; range = [0,1]) = map(curve, Base.range(range..., length=n))
|
||||||
|
|
||||||
# build a BezierCurve which leaves point p vertically upwards and arrives point q vertically upwards.
|
# build a BezierCurve which leaves point p vertically upwards and arrives point q vertically upwards.
|
||||||
# may create a loop if necessary. Assumes the view is [0,1]
|
# may create a loop if necessary. Assumes the view is [0,1]
|
||||||
|
|||||||
+59
-9
@@ -165,7 +165,7 @@ PlotExample("Marker types",
|
|||||||
),
|
),
|
||||||
|
|
||||||
PlotExample("Bar",
|
PlotExample("Bar",
|
||||||
"x is the midpoint of the bar. (todo: allow passing of edges instead of midpoints)",
|
"`x` is the midpoint of the bar. (todo: allow passing of edges instead of midpoints)",
|
||||||
[:(begin
|
[:(begin
|
||||||
bar(randn(99))
|
bar(randn(99))
|
||||||
end)]
|
end)]
|
||||||
@@ -238,12 +238,12 @@ build with the method `text(string, attr...)`, which wraps font and color attrib
|
|||||||
""",
|
""",
|
||||||
[:(begin
|
[:(begin
|
||||||
y = rand(10)
|
y = rand(10)
|
||||||
plot(y, annotations = (3,y[3],text("this is #3",:left)), leg=false)
|
plot(y, annotations = (3,y[3], Plots.text("this is #3",:left)), leg=false)
|
||||||
annotate!([(5, y[5], text("this is #5",16,:red,:center)),
|
annotate!([(5, y[5], Plots.text("this is #5",16,:red,:center)),
|
||||||
(10, y[10], text("this is #10",:right,20,"courier"))])
|
(10, y[10], Plots.text("this is #10",:right,20,"courier"))])
|
||||||
scatter!(range(2, stop=8, length=6), rand(6), marker=(50,0.2,:orange),
|
scatter!(range(2, stop=8, length=6), rand(6), marker=(50,0.2,:orange),
|
||||||
series_annotations = ["series","annotations","map","to","series",
|
series_annotations = ["series","annotations","map","to","series",
|
||||||
text("data",:green)])
|
Plots.text("data",:green)])
|
||||||
end)]
|
end)]
|
||||||
),
|
),
|
||||||
|
|
||||||
@@ -305,7 +305,8 @@ PlotExample("3D",
|
|||||||
|
|
||||||
PlotExample("DataFrames",
|
PlotExample("DataFrames",
|
||||||
"Plot using DataFrame column symbols.",
|
"Plot using DataFrame column symbols.",
|
||||||
[:(begin
|
[:(using StatsPlots), # can't be inside begin block because @df gets expanded first
|
||||||
|
:(begin
|
||||||
import RDatasets
|
import RDatasets
|
||||||
iris = RDatasets.dataset("datasets", "iris")
|
iris = RDatasets.dataset("datasets", "iris")
|
||||||
@df iris scatter(:SepalLength, :SepalWidth, group=:Species,
|
@df iris scatter(:SepalLength, :SepalWidth, group=:Species,
|
||||||
@@ -354,7 +355,8 @@ PlotExample("Layouts, margins, label rotation, title location",
|
|||||||
|
|
||||||
PlotExample("Boxplot and Violin series recipes",
|
PlotExample("Boxplot and Violin series recipes",
|
||||||
"",
|
"",
|
||||||
[:(begin
|
[:(using StatsPlots), # can't be inside begin block because @df gets expanded first
|
||||||
|
:(begin
|
||||||
import RDatasets
|
import RDatasets
|
||||||
singers = RDatasets.dataset("lattice", "singer")
|
singers = RDatasets.dataset("lattice", "singer")
|
||||||
@df singers violin(:VoicePart, :Height, line = 0, fill = (0.2, :blue))
|
@df singers violin(:VoicePart, :Height, line = 0, fill = (0.2, :blue))
|
||||||
@@ -454,6 +456,49 @@ see: http://stackoverflow.com/a/37732384/5075246
|
|||||||
end)]
|
end)]
|
||||||
),
|
),
|
||||||
|
|
||||||
|
PlotExample("Ribbons",
|
||||||
|
"""
|
||||||
|
Ribbons can be added to lines via the `ribbon` keyword;
|
||||||
|
you can pass a tuple of arrays (upper and lower bounds),
|
||||||
|
a single Array (for symmetric ribbons), a Function, or a number.
|
||||||
|
""",
|
||||||
|
[:(begin
|
||||||
|
plot(
|
||||||
|
plot(0:10; ribbon = (LinRange(0, 2, 10), LinRange(0, 1, 10))),
|
||||||
|
plot(0:10; ribbon = 0:0.5:5),
|
||||||
|
plot(0:10; ribbon = sqrt),
|
||||||
|
plot(0:10; ribbon = 1),
|
||||||
|
)
|
||||||
|
end)]
|
||||||
|
),
|
||||||
|
|
||||||
|
PlotExample("Histogram2D (complex values)",
|
||||||
|
"",
|
||||||
|
[:(begin
|
||||||
|
n = 10_000
|
||||||
|
x = exp.(0.1randn(n) .+ randn(n).*(im))
|
||||||
|
histogram2d(x, nbins=(20,40), show_empty_bins=true,
|
||||||
|
normed=true, aspect_ratio=1)
|
||||||
|
end)]
|
||||||
|
),
|
||||||
|
|
||||||
|
PlotExample("Unconnected lines using `missing` or `NaN`",
|
||||||
|
"""
|
||||||
|
Missing values and non-finite values, including `NaN`, are not plotted.
|
||||||
|
Instead, lines are separated into segments at these values.
|
||||||
|
""",
|
||||||
|
[:(begin
|
||||||
|
x,y = [1,2,2,1,1], [1,2,1,2,1]
|
||||||
|
plot(
|
||||||
|
plot([rand(5); NaN; rand(5); NaN; rand(5)]),
|
||||||
|
plot([1,missing,2,3], marker=true),
|
||||||
|
plot([x; NaN; x.+2], [y; NaN; y.+1], arrow=2),
|
||||||
|
plot([1, 2+3im, Inf, 4im, 3, -Inf*im, 0, 3+3im], marker=true),
|
||||||
|
legend=false
|
||||||
|
)
|
||||||
|
end)]
|
||||||
|
),
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
# Some constants for PlotDocs and PlotReferenceImages
|
# Some constants for PlotDocs and PlotReferenceImages
|
||||||
@@ -461,7 +506,7 @@ _animation_examples = [2, 30]
|
|||||||
_backend_skips = Dict(
|
_backend_skips = Dict(
|
||||||
:gr => [25, 30],
|
:gr => [25, 30],
|
||||||
:pyplot => [25, 30],
|
:pyplot => [25, 30],
|
||||||
:plotlyjs => [2, 21, 25, 30, 31],
|
:plotlyjs => [2, 21, 24, 25, 30, 31],
|
||||||
:pgfplots => [2, 5, 6, 10, 16, 20, 22, 23, 25, 28, 30],
|
:pgfplots => [2, 5, 6, 10, 16, 20, 22, 23, 25, 28, 30],
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -475,7 +520,12 @@ function test_examples(pkgname::Symbol, idx::Int; debug = false, disp = true)
|
|||||||
@info("Testing plot: $pkgname:$idx:$(_examples[idx].header)")
|
@info("Testing plot: $pkgname:$idx:$(_examples[idx].header)")
|
||||||
backend(pkgname)
|
backend(pkgname)
|
||||||
backend()
|
backend()
|
||||||
map(eval, _examples[idx].exprs)
|
|
||||||
|
# prevent leaking variables (esp. functions) directly into Plots namespace
|
||||||
|
m = Module(:PlotExampleModule)
|
||||||
|
Base.eval(m, :(using Plots))
|
||||||
|
map(exprs -> Base.eval(m, exprs), _examples[idx].exprs)
|
||||||
|
|
||||||
plt = current()
|
plt = current()
|
||||||
if disp
|
if disp
|
||||||
gui(plt)
|
gui(plt)
|
||||||
|
|||||||
+35
-6
@@ -28,12 +28,41 @@ function __init__()
|
|||||||
insert!(Base.Multimedia.displays, findlast(x -> x isa REPL.REPLDisplay, Base.Multimedia.displays) + 1, PlotsDisplay())
|
insert!(Base.Multimedia.displays, findlast(x -> x isa REPL.REPLDisplay, Base.Multimedia.displays) + 1, PlotsDisplay())
|
||||||
end)
|
end)
|
||||||
|
|
||||||
@require HDF5 = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" include(joinpath(@__DIR__, "backends", "hdf5.jl"))
|
@require HDF5 = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" begin
|
||||||
@require InspectDR = "d0351b0e-4b05-5898-87b3-e2a8edfddd1d" include(joinpath(@__DIR__, "backends", "inspectdr.jl"))
|
fn = joinpath(@__DIR__, "backends", "hdf5.jl")
|
||||||
@require PGFPlots = "3b7a836e-365b-5785-a47d-02c71176b4aa" include(joinpath(@__DIR__, "backends", "pgfplots.jl"))
|
include(fn)
|
||||||
@require PlotlyJS = "f0f68f2c-4968-5e81-91da-67840de0976a" include(joinpath(@__DIR__, "backends", "plotlyjs.jl"))
|
@require Revise = "295af30f-e4ad-537b-8983-00126c2a3abe" Revise.track(Plots, fn)
|
||||||
@require PyPlot = "d330b81b-6aea-500a-939a-2ce795aea3ee" include(joinpath(@__DIR__, "backends", "pyplot.jl"))
|
end
|
||||||
@require UnicodePlots = "b8865327-cd53-5732-bb35-84acbb429228" include(joinpath(@__DIR__, "backends", "unicodeplots.jl"))
|
|
||||||
|
@require InspectDR = "d0351b0e-4b05-5898-87b3-e2a8edfddd1d" begin
|
||||||
|
fn = joinpath(@__DIR__, "backends", "inspectdr.jl")
|
||||||
|
include(fn)
|
||||||
|
@require Revise = "295af30f-e4ad-537b-8983-00126c2a3abe" Revise.track(Plots, fn)
|
||||||
|
end
|
||||||
|
|
||||||
|
@require PGFPlots = "3b7a836e-365b-5785-a47d-02c71176b4aa" begin
|
||||||
|
fn = joinpath(@__DIR__, "backends", "pgfplots.jl")
|
||||||
|
include(fn)
|
||||||
|
@require Revise = "295af30f-e4ad-537b-8983-00126c2a3abe" Revise.track(Plots, fn)
|
||||||
|
end
|
||||||
|
|
||||||
|
@require PlotlyJS = "f0f68f2c-4968-5e81-91da-67840de0976a" begin
|
||||||
|
fn = joinpath(@__DIR__, "backends", "plotlyjs.jl")
|
||||||
|
include(fn)
|
||||||
|
@require Revise = "295af30f-e4ad-537b-8983-00126c2a3abe" Revise.track(Plots, fn)
|
||||||
|
end
|
||||||
|
|
||||||
|
@require PyPlot = "d330b81b-6aea-500a-939a-2ce795aea3ee" begin
|
||||||
|
fn = joinpath(@__DIR__, "backends", "pyplot.jl")
|
||||||
|
include(fn)
|
||||||
|
@require Revise = "295af30f-e4ad-537b-8983-00126c2a3abe" Revise.track(Plots, fn)
|
||||||
|
end
|
||||||
|
|
||||||
|
@require UnicodePlots = "b8865327-cd53-5732-bb35-84acbb429228" begin
|
||||||
|
fn = joinpath(@__DIR__, "backends", "unicodeplots.jl")
|
||||||
|
include(fn)
|
||||||
|
@require Revise = "295af30f-e4ad-537b-8983-00126c2a3abe" Revise.track(Plots, fn)
|
||||||
|
end
|
||||||
|
|
||||||
@require IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" begin
|
@require IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" begin
|
||||||
if IJulia.inited
|
if IJulia.inited
|
||||||
|
|||||||
+49
-49
@@ -107,7 +107,6 @@ function resolve_mixed(mix::MixedMeasures, sp::Subplot, letter::Symbol)
|
|||||||
if mix.len != 0mm
|
if mix.len != 0mm
|
||||||
f = (letter == :x ? width : height)
|
f = (letter == :x ? width : height)
|
||||||
totlen = f(plotarea(sp))
|
totlen = f(plotarea(sp))
|
||||||
@show totlen
|
|
||||||
pct += mix.len / totlen
|
pct += mix.len / totlen
|
||||||
end
|
end
|
||||||
if pct != 0
|
if pct != 0
|
||||||
@@ -188,29 +187,29 @@ parent_bbox(layout::AbstractLayout) = bbox(parent(layout))
|
|||||||
# padding_h(layout::AbstractLayout) = bottom_padding(layout) + top_padding(layout)
|
# padding_h(layout::AbstractLayout) = bottom_padding(layout) + top_padding(layout)
|
||||||
# padding(layout::AbstractLayout) = (padding_w(layout), padding_h(layout))
|
# padding(layout::AbstractLayout) = (padding_w(layout), padding_h(layout))
|
||||||
|
|
||||||
@noinline update_position!(layout::AbstractLayout) = nothing
|
update_position!(layout::AbstractLayout) = nothing
|
||||||
@noinline update_child_bboxes!(layout::AbstractLayout, minimum_perimeter = [0mm,0mm,0mm,0mm]) = nothing
|
update_child_bboxes!(layout::AbstractLayout, minimum_perimeter = [0mm,0mm,0mm,0mm]) = nothing
|
||||||
|
|
||||||
@noinline left(layout::AbstractLayout) = left(bbox(layout))
|
left(layout::AbstractLayout) = left(bbox(layout))
|
||||||
@noinline top(layout::AbstractLayout) = top(bbox(layout))
|
top(layout::AbstractLayout) = top(bbox(layout))
|
||||||
@noinline right(layout::AbstractLayout) = right(bbox(layout))
|
right(layout::AbstractLayout) = right(bbox(layout))
|
||||||
@noinline bottom(layout::AbstractLayout) = bottom(bbox(layout))
|
bottom(layout::AbstractLayout) = bottom(bbox(layout))
|
||||||
@noinline width(layout::AbstractLayout) = width(bbox(layout))
|
width(layout::AbstractLayout) = width(bbox(layout))
|
||||||
@noinline height(layout::AbstractLayout) = height(bbox(layout))
|
height(layout::AbstractLayout) = height(bbox(layout))
|
||||||
|
|
||||||
# pass these through to the bbox methods if there's no plotarea
|
# pass these through to the bbox methods if there's no plotarea
|
||||||
@noinline plotarea(layout::AbstractLayout) = bbox(layout)
|
plotarea(layout::AbstractLayout) = bbox(layout)
|
||||||
@noinline plotarea!(layout::AbstractLayout, bb::BoundingBox) = bbox!(layout, bb)
|
plotarea!(layout::AbstractLayout, bb::BoundingBox) = bbox!(layout, bb)
|
||||||
|
|
||||||
@noinline attr(layout::AbstractLayout, k::Symbol) = layout.attr[k]
|
attr(layout::AbstractLayout, k::Symbol) = layout.attr[k]
|
||||||
@noinline attr(layout::AbstractLayout, k::Symbol, v) = get(layout.attr, k, v)
|
attr(layout::AbstractLayout, k::Symbol, v) = get(layout.attr, k, v)
|
||||||
@noinline attr!(layout::AbstractLayout, v, k::Symbol) = (layout.attr[k] = v)
|
attr!(layout::AbstractLayout, v, k::Symbol) = (layout.attr[k] = v)
|
||||||
@noinline hasattr(layout::AbstractLayout, k::Symbol) = haskey(layout.attr, k)
|
hasattr(layout::AbstractLayout, k::Symbol) = haskey(layout.attr, k)
|
||||||
|
|
||||||
@noinline leftpad(layout::AbstractLayout) = 0mm
|
leftpad(layout::AbstractLayout) = 0mm
|
||||||
@noinline toppad(layout::AbstractLayout) = 0mm
|
toppad(layout::AbstractLayout) = 0mm
|
||||||
@noinline rightpad(layout::AbstractLayout) = 0mm
|
rightpad(layout::AbstractLayout) = 0mm
|
||||||
@noinline bottompad(layout::AbstractLayout) = 0mm
|
bottompad(layout::AbstractLayout) = 0mm
|
||||||
|
|
||||||
# -----------------------------------------------------------
|
# -----------------------------------------------------------
|
||||||
# RootLayout
|
# RootLayout
|
||||||
@@ -218,6 +217,7 @@ parent_bbox(layout::AbstractLayout) = bbox(parent(layout))
|
|||||||
# this is the parent of the top-level layout
|
# this is the parent of the top-level layout
|
||||||
struct RootLayout <: AbstractLayout end
|
struct RootLayout <: AbstractLayout end
|
||||||
|
|
||||||
|
Base.show(io::IO, layout::RootLayout) = Base.show_default(io, layout)
|
||||||
Base.parent(::RootLayout) = nothing
|
Base.parent(::RootLayout) = nothing
|
||||||
parent_bbox(::RootLayout) = defaultbox
|
parent_bbox(::RootLayout) = defaultbox
|
||||||
bbox(::RootLayout) = defaultbox
|
bbox(::RootLayout) = defaultbox
|
||||||
@@ -227,8 +227,8 @@ bbox(::RootLayout) = defaultbox
|
|||||||
|
|
||||||
# contains blank space
|
# contains blank space
|
||||||
mutable struct EmptyLayout <: AbstractLayout
|
mutable struct EmptyLayout <: AbstractLayout
|
||||||
parent
|
parent::AbstractLayout
|
||||||
bbox#::BoundingBox
|
bbox::BoundingBox
|
||||||
attr::KW # store label, width, and height for initialization
|
attr::KW # store label, width, and height for initialization
|
||||||
# label # this is the label that the subplot will take (since we create a layout before initialization)
|
# label # this is the label that the subplot will take (since we create a layout before initialization)
|
||||||
end
|
end
|
||||||
@@ -245,12 +245,12 @@ _update_min_padding!(layout::EmptyLayout) = nothing
|
|||||||
|
|
||||||
# nested, gridded layout with optional size percentages
|
# nested, gridded layout with optional size percentages
|
||||||
mutable struct GridLayout <: AbstractLayout
|
mutable struct GridLayout <: AbstractLayout
|
||||||
parent
|
parent::AbstractLayout
|
||||||
minpad::Tuple{AbsoluteLength,AbsoluteLength,AbsoluteLength,AbsoluteLength} # leftpad, toppad, rightpad, bottompad
|
minpad::Tuple # leftpad, toppad, rightpad, bottompad
|
||||||
bbox#::BoundingBox
|
bbox::BoundingBox
|
||||||
grid::Matrix{Any} # Nested layouts. Each position is a AbstractLayout, which allows for arbitrary recursion
|
grid::Matrix{AbstractLayout} # Nested layouts. Each position is a AbstractLayout, which allows for arbitrary recursion
|
||||||
widths::Vector{Any}
|
widths::Vector{Measure}
|
||||||
heights::Vector{Any}
|
heights::Vector{Measure}
|
||||||
attr::KW
|
attr::KW
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -268,14 +268,14 @@ function GridLayout(dims...;
|
|||||||
widths = zeros(dims[2]),
|
widths = zeros(dims[2]),
|
||||||
heights = zeros(dims[1]),
|
heights = zeros(dims[1]),
|
||||||
kw...)
|
kw...)
|
||||||
grid = Matrix{Any}(undef, dims...)
|
grid = Matrix{AbstractLayout}(undef, dims...)
|
||||||
layout = GridLayout(
|
layout = GridLayout(
|
||||||
parent,
|
parent,
|
||||||
(20mm, 5mm, 2mm, 10mm),
|
(20mm, 5mm, 2mm, 10mm),
|
||||||
defaultbox,
|
defaultbox,
|
||||||
grid,
|
grid,
|
||||||
Any[w*pct for w in widths],
|
Measure[w*pct for w in widths],
|
||||||
Any[h*pct for h in heights],
|
Measure[h*pct for h in heights],
|
||||||
# convert(Vector{Float64}, widths),
|
# convert(Vector{Float64}, widths),
|
||||||
# convert(Vector{Float64}, heights),
|
# convert(Vector{Float64}, heights),
|
||||||
KW(kw))
|
KW(kw))
|
||||||
@@ -349,18 +349,18 @@ function update_child_bboxes!(layout::GridLayout, minimum_perimeter = [0mm,0mm,0
|
|||||||
# # create a matrix for each minimum padding direction
|
# # create a matrix for each minimum padding direction
|
||||||
# _update_min_padding!(layout)
|
# _update_min_padding!(layout)
|
||||||
|
|
||||||
minpad_left::Matrix{AbsoluteLength} = map(leftpad, layout.grid)
|
minpad_left = map(leftpad, layout.grid)
|
||||||
minpad_top::Matrix{AbsoluteLength} = map(toppad, layout.grid)
|
minpad_top = map(toppad, layout.grid)
|
||||||
minpad_right::Matrix{AbsoluteLength} = map(rightpad, layout.grid)
|
minpad_right = map(rightpad, layout.grid)
|
||||||
minpad_bottom::Matrix{AbsoluteLength} = map(bottompad, layout.grid)
|
minpad_bottom = map(bottompad, layout.grid)
|
||||||
|
|
||||||
# get the max horizontal (left and right) padding over columns,
|
# get the max horizontal (left and right) padding over columns,
|
||||||
# and max vertical (bottom and top) padding over rows
|
# and max vertical (bottom and top) padding over rows
|
||||||
# TODO: add extra padding here
|
# TODO: add extra padding here
|
||||||
pad_left::Matrix{AbsoluteLength} = maximum(minpad_left, dims = 1)
|
pad_left = maximum(minpad_left, dims = 1)
|
||||||
pad_top::Matrix{AbsoluteLength} = maximum(minpad_top, dims = 2)
|
pad_top = maximum(minpad_top, dims = 2)
|
||||||
pad_right::Matrix{AbsoluteLength} = maximum(minpad_right, dims = 1)
|
pad_right = maximum(minpad_right, dims = 1)
|
||||||
pad_bottom::Matrix{AbsoluteLength} = maximum(minpad_bottom, dims = 2)
|
pad_bottom = maximum(minpad_bottom, dims = 2)
|
||||||
|
|
||||||
# make sure the perimeter match the parent
|
# make sure the perimeter match the parent
|
||||||
pad_left[1] = max(pad_left[1], minimum_perimeter[1])
|
pad_left[1] = max(pad_left[1], minimum_perimeter[1])
|
||||||
@@ -389,14 +389,14 @@ function update_child_bboxes!(layout::GridLayout, minimum_perimeter = [0mm,0mm,0
|
|||||||
child = layout[r,c]
|
child = layout[r,c]
|
||||||
|
|
||||||
# get the top-left corner of this child... the first one is top-left of the parent (i.e. layout)
|
# get the top-left corner of this child... the first one is top-left of the parent (i.e. layout)
|
||||||
child_left::AbsoluteLength = (c == 1 ? left(layout.bbox) : right(layout[r, c-1].bbox))
|
child_left = (c == 1 ? left(layout.bbox) : right(layout[r, c-1].bbox))
|
||||||
child_top::AbsoluteLength = (r == 1 ? top(layout.bbox) : bottom(layout[r-1, c].bbox))
|
child_top = (r == 1 ? top(layout.bbox) : bottom(layout[r-1, c].bbox))
|
||||||
|
|
||||||
# compute plot area
|
# compute plot area
|
||||||
plotarea_left::AbsoluteLength = child_left + pad_left[c]
|
plotarea_left = child_left + pad_left[c]
|
||||||
plotarea_top::AbsoluteLength = child_top + pad_top[r]
|
plotarea_top = child_top + pad_top[r]
|
||||||
plotarea_width::AbsoluteLength = total_plotarea_horizontal * layout.widths[c]
|
plotarea_width = total_plotarea_horizontal * layout.widths[c]
|
||||||
plotarea_height::AbsoluteLength = total_plotarea_vertical * layout.heights[r]
|
plotarea_height = total_plotarea_vertical * layout.heights[r]
|
||||||
plotarea!(child, BoundingBox(plotarea_left, plotarea_top, plotarea_width, plotarea_height))
|
plotarea!(child, BoundingBox(plotarea_left, plotarea_top, plotarea_width, plotarea_height))
|
||||||
|
|
||||||
# compute child bbox
|
# compute child bbox
|
||||||
@@ -512,14 +512,14 @@ end
|
|||||||
|
|
||||||
# # just a single subplot
|
# # just a single subplot
|
||||||
# function build_layout(sp::Subplot, n::Integer)
|
# function build_layout(sp::Subplot, n::Integer)
|
||||||
# sp, Subplot[sp], KW(gensym() => sp)
|
# sp, Subplot[sp], SubplotMap(gensym() => sp)
|
||||||
# end
|
# end
|
||||||
|
|
||||||
# n is the number of subplots... build a grid and initialize the inner subplots recursively
|
# n is the number of subplots... build a grid and initialize the inner subplots recursively
|
||||||
function build_layout(layout::GridLayout, n::Integer)
|
function build_layout(layout::GridLayout, n::Integer)
|
||||||
nr, nc = size(layout)
|
nr, nc = size(layout)
|
||||||
subplots = Any[]
|
subplots = Subplot[]
|
||||||
spmap = KW()
|
spmap = SubplotMap()
|
||||||
i = 0
|
i = 0
|
||||||
for r=1:nr, c=1:nc
|
for r=1:nr, c=1:nc
|
||||||
l = layout[r,c]
|
l = layout[r,c]
|
||||||
@@ -560,8 +560,8 @@ end
|
|||||||
# TODO... much of the logic overlaps with the method above... can we merge?
|
# TODO... much of the logic overlaps with the method above... can we merge?
|
||||||
function build_layout(layout::GridLayout, numsp::Integer, plts::AVec{Plot})
|
function build_layout(layout::GridLayout, numsp::Integer, plts::AVec{Plot})
|
||||||
nr, nc = size(layout)
|
nr, nc = size(layout)
|
||||||
subplots = Any[]
|
subplots = Subplot[]
|
||||||
spmap = KW()
|
spmap = SubplotMap()
|
||||||
i = 0
|
i = 0
|
||||||
for r=1:nr, c=1:nc
|
for r=1:nr, c=1:nc
|
||||||
l = layout[r,c]
|
l = layout[r,c]
|
||||||
|
|||||||
+22
-16
@@ -72,6 +72,7 @@ const _savemap = Dict(
|
|||||||
"eps" => eps,
|
"eps" => eps,
|
||||||
"tex" => tex,
|
"tex" => tex,
|
||||||
"html" => html,
|
"html" => html,
|
||||||
|
"tikz" => tex,
|
||||||
)
|
)
|
||||||
|
|
||||||
function getExtension(fn::AbstractString)
|
function getExtension(fn::AbstractString)
|
||||||
@@ -129,29 +130,29 @@ savefig(fn::AbstractString) = savefig(current(), fn)
|
|||||||
|
|
||||||
Display a plot using the backends' gui window
|
Display a plot using the backends' gui window
|
||||||
"""
|
"""
|
||||||
@noinline gui(plt::Plot = current()) = display(PlotsDisplay(), plt)
|
gui(plt::Plot = current()) = display(PlotsDisplay(), plt)
|
||||||
|
|
||||||
# IJulia only... inline display
|
# IJulia only... inline display
|
||||||
@noinline function inline(plt::Plot = current())
|
function inline(plt::Plot = current())
|
||||||
isijulia() || error("inline() is IJulia-only")
|
isijulia() || error("inline() is IJulia-only")
|
||||||
Main.IJulia.clear_output(true)
|
Main.IJulia.clear_output(true)
|
||||||
display(Main.IJulia.InlineDisplay(), plt)
|
display(Main.IJulia.InlineDisplay(), plt)
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline function Base.display(::PlotsDisplay, plt::Plot)
|
function Base.display(::PlotsDisplay, plt::Plot)
|
||||||
prepare_output(plt)
|
prepare_output(plt)
|
||||||
_display(plt)
|
_display(plt)
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline _do_plot_show(plt, showval::Bool) = showval && gui(plt)
|
_do_plot_show(plt, showval::Bool) = showval && gui(plt)
|
||||||
@noinline function _do_plot_show(plt, showval::Symbol)
|
function _do_plot_show(plt, showval::Symbol)
|
||||||
showval == :gui && gui(plt)
|
showval == :gui && gui(plt)
|
||||||
showval in (:inline,:ijulia) && inline(plt)
|
showval in (:inline,:ijulia) && inline(plt)
|
||||||
end
|
end
|
||||||
|
|
||||||
# ---------------------------------------------------------
|
# ---------------------------------------------------------
|
||||||
|
|
||||||
const _best_html_output_type = Dict{Symbol,Symbol}(
|
const _best_html_output_type = KW(
|
||||||
:pyplot => :png,
|
:pyplot => :png,
|
||||||
:unicodeplots => :txt,
|
:unicodeplots => :txt,
|
||||||
:plotlyjs => :html,
|
:plotlyjs => :html,
|
||||||
@@ -159,7 +160,7 @@ const _best_html_output_type = Dict{Symbol,Symbol}(
|
|||||||
)
|
)
|
||||||
|
|
||||||
# a backup for html... passes to svg or png depending on the html_output_format arg
|
# a backup for html... passes to svg or png depending on the html_output_format arg
|
||||||
@noinline function _show(io::IO, ::MIME"text/html", plt::Plot)
|
function _show(io::IO, ::MIME"text/html", plt::Plot)
|
||||||
output_type = Symbol(plt.attr[:html_output_format])
|
output_type = Symbol(plt.attr[:html_output_format])
|
||||||
if output_type == :auto
|
if output_type == :auto
|
||||||
output_type = get(_best_html_output_type, backend_name(plt.backend), :svg)
|
output_type = get(_best_html_output_type, backend_name(plt.backend), :svg)
|
||||||
@@ -178,11 +179,11 @@ const _best_html_output_type = Dict{Symbol,Symbol}(
|
|||||||
end
|
end
|
||||||
|
|
||||||
# delegate showable to _show instead
|
# delegate showable to _show instead
|
||||||
@noinline function Base.showable(m::M, plt::P) where {M<:MIME, P<:Plot}
|
function Base.showable(m::M, plt::P) where {M<:MIME, P<:Plot}
|
||||||
return hasmethod(_show, Tuple{IO, M, P})
|
return hasmethod(_show, Tuple{IO, M, P})
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline function _display(plt::Plot)
|
function _display(plt::Plot)
|
||||||
@warn("_display is not defined for this backend.")
|
@warn("_display is not defined for this backend.")
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -201,8 +202,10 @@ for mime in ("text/plain", "text/html", "image/png", "image/eps", "image/svg+xml
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Base.show(io::IO, m::MIME"application/prs.juno.plotpane+html", plt::Plot) = showjuno(io, MIME("text/html"), plt)
|
||||||
|
|
||||||
# default text/plain for all backends
|
# default text/plain for all backends
|
||||||
@noinline _show(io::IO, ::MIME{Symbol("text/plain")}, plt::Plot) = show(io, plt)
|
_show(io::IO, ::MIME{Symbol("text/plain")}, plt::Plot) = show(io, plt)
|
||||||
|
|
||||||
"Close all open gui windows of the current backend"
|
"Close all open gui windows of the current backend"
|
||||||
closeall() = closeall(backend())
|
closeall() = closeall(backend())
|
||||||
@@ -228,16 +231,17 @@ closeall() = closeall(backend())
|
|||||||
# ---------------------------------------------------------
|
# ---------------------------------------------------------
|
||||||
# Atom PlotPane
|
# Atom PlotPane
|
||||||
# ---------------------------------------------------------
|
# ---------------------------------------------------------
|
||||||
@noinline function showjuno(io::IO, m, plt)
|
function showjuno(io::IO, m, plt)
|
||||||
sz = plt[:size]
|
sz = collect(plt[:size])
|
||||||
dpi = plt[:dpi]
|
dpi = plt[:dpi]
|
||||||
thickness_scaling = plt[:thickness_scaling]
|
thickness_scaling = plt[:thickness_scaling]
|
||||||
|
|
||||||
jsize = get(io, :juno_plotsize, [400, 500])
|
jsize = get(io, :juno_plotsize, [400, 500])
|
||||||
|
jratio = get(io, :juno_dpi_ratio, 1)
|
||||||
|
|
||||||
scale = minimum(jsize[i] / sz[i] for i in 1:2)
|
scale = minimum(jsize[i] / sz[i] for i in 1:2)
|
||||||
plt[:size] = (s * scale for s in sz)
|
plt[:size] = [s * scale for s in sz]
|
||||||
plt[:dpi] = Plots.DPI
|
plt[:dpi] = jratio*Plots.DPI
|
||||||
plt[:thickness_scaling] *= scale
|
plt[:thickness_scaling] *= scale
|
||||||
|
|
||||||
prepare_output(plt)
|
prepare_output(plt)
|
||||||
@@ -250,7 +254,7 @@ closeall() = closeall(backend())
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline function _showjuno(io::IO, m::MIME"image/svg+xml", plt)
|
function _showjuno(io::IO, m::MIME"image/svg+xml", plt)
|
||||||
if Symbol(plt.attr[:html_output_format]) ≠ :svg
|
if Symbol(plt.attr[:html_output_format]) ≠ :svg
|
||||||
throw(MethodError(show, (typeof(m), typeof(plt))))
|
throw(MethodError(show, (typeof(m), typeof(plt))))
|
||||||
else
|
else
|
||||||
@@ -258,4 +262,6 @@ end
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline _showjuno(io::IO, m, plt) = _show(io, m, plt)
|
Base.showable(::MIME"application/prs.juno.plotpane+html", plt::Plot) = showable(MIME"text/html"(), plt)
|
||||||
|
|
||||||
|
_showjuno(io::IO, m, plt) = _show(io, m, plt)
|
||||||
|
|||||||
+16
-15
@@ -3,11 +3,11 @@
|
|||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
# preprocessing
|
# preprocessing
|
||||||
|
|
||||||
@noinline function command_idx(kw_list::AVec{KW}, kw::KW)
|
function command_idx(kw_list::AVec{KW}, kw::KW)
|
||||||
Int(kw[:series_plotindex]) - Int(kw_list[1][:series_plotindex]) + 1
|
Int(kw[:series_plotindex]) - Int(kw_list[1][:series_plotindex]) + 1
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline function _expand_seriestype_array(plotattributes::KW, args)
|
function _expand_seriestype_array(plotattributes::KW, args)
|
||||||
sts = get(plotattributes, :seriestype, :path)
|
sts = get(plotattributes, :seriestype, :path)
|
||||||
if typeof(sts) <: AbstractArray
|
if typeof(sts) <: AbstractArray
|
||||||
delete!(plotattributes, :seriestype)
|
delete!(plotattributes, :seriestype)
|
||||||
@@ -23,7 +23,7 @@ end
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline function _preprocess_args(plotattributes::KW, args, still_to_process::Vector{RecipeData})
|
function _preprocess_args(plotattributes::KW, args, still_to_process::Vector{RecipeData})
|
||||||
# the grouping mechanism is a recipe on a GroupBy object
|
# the grouping mechanism is a recipe on a GroupBy object
|
||||||
# we simply add the GroupBy object to the front of the args list to allow
|
# we simply add the GroupBy object to the front of the args list to allow
|
||||||
# the recipe to be applied
|
# the recipe to be applied
|
||||||
@@ -57,7 +57,7 @@ end
|
|||||||
# user recipes
|
# user recipes
|
||||||
|
|
||||||
|
|
||||||
@noinline function _process_userrecipes(plt::Plot, plotattributes::KW, args)
|
function _process_userrecipes(plt::Plot, plotattributes::KW, args)
|
||||||
still_to_process = RecipeData[]
|
still_to_process = RecipeData[]
|
||||||
args = _preprocess_args(plotattributes, args, still_to_process)
|
args = _preprocess_args(plotattributes, args, still_to_process)
|
||||||
|
|
||||||
@@ -90,7 +90,7 @@ end
|
|||||||
kw_list
|
kw_list
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline function _process_userrecipe(plt::Plot, kw_list::Vector{KW}, recipedata::RecipeData)
|
function _process_userrecipe(plt::Plot, kw_list::Vector{KW}, recipedata::RecipeData)
|
||||||
# when the arg tuple is empty, that means there's nothing left to recursively
|
# when the arg tuple is empty, that means there's nothing left to recursively
|
||||||
# process... finish up and add to the kw_list
|
# process... finish up and add to the kw_list
|
||||||
kw = recipedata.plotattributes
|
kw = recipedata.plotattributes
|
||||||
@@ -108,7 +108,7 @@ end
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline function _preprocess_userrecipe(kw::KW)
|
function _preprocess_userrecipe(kw::KW)
|
||||||
_add_markershape(kw)
|
_add_markershape(kw)
|
||||||
|
|
||||||
# if there was a grouping, filter the data here
|
# if there was a grouping, filter the data here
|
||||||
@@ -132,7 +132,7 @@ end
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline function _add_errorbar_kw(kw_list::Vector{KW}, kw::KW)
|
function _add_errorbar_kw(kw_list::Vector{KW}, kw::KW)
|
||||||
# handle error bars by creating new recipedata data... these will have
|
# handle error bars by creating new recipedata data... these will have
|
||||||
# the same recipedata index as the recipedata they are copied from
|
# the same recipedata index as the recipedata they are copied from
|
||||||
for esym in (:xerror, :yerror)
|
for esym in (:xerror, :yerror)
|
||||||
@@ -147,7 +147,7 @@ end
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline function _add_smooth_kw(kw_list::Vector{KW}, kw::KW)
|
function _add_smooth_kw(kw_list::Vector{KW}, kw::KW)
|
||||||
# handle smoothing by adding a new series
|
# handle smoothing by adding a new series
|
||||||
if get(kw, :smooth, false)
|
if get(kw, :smooth, false)
|
||||||
x, y = kw[:x], kw[:y]
|
x, y = kw[:x], kw[:y]
|
||||||
@@ -203,7 +203,7 @@ end
|
|||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
# setup plot and subplot
|
# setup plot and subplot
|
||||||
|
|
||||||
function _plot_setup(plt::Plot{T}, plotattributes::KW, kw_list::Vector{KW}) where {T}
|
function _plot_setup(plt::Plot, plotattributes::KW, kw_list::Vector{KW})
|
||||||
# merge in anything meant for the Plot
|
# merge in anything meant for the Plot
|
||||||
for kw in kw_list, (k,v) in kw
|
for kw in kw_list, (k,v) in kw
|
||||||
haskey(_plot_defaults, k) && (plotattributes[k] = pop!(kw, k))
|
haskey(_plot_defaults, k) && (plotattributes[k] = pop!(kw, k))
|
||||||
@@ -252,17 +252,18 @@ function _plot_setup(plt::Plot{T}, plotattributes::KW, kw_list::Vector{KW}) wher
|
|||||||
plt[:inset_subplots] = nothing
|
plt[:inset_subplots] = nothing
|
||||||
end
|
end
|
||||||
|
|
||||||
function _subplot_setup(plt::Plot{T}, plotattributes::KW, kw_list::Vector{KW}) where T
|
function _subplot_setup(plt::Plot, plotattributes::KW, kw_list::Vector{KW})
|
||||||
# we'll keep a map of subplot to an attribute override dict.
|
# we'll keep a map of subplot to an attribute override dict.
|
||||||
# Subplot/Axis attributes set by a user/series recipe apply only to the
|
# Subplot/Axis attributes set by a user/series recipe apply only to the
|
||||||
# Subplot object which they belong to.
|
# Subplot object which they belong to.
|
||||||
# TODO: allow matrices to still apply to all subplots
|
# TODO: allow matrices to still apply to all subplots
|
||||||
sp_attrs = Dict{Any,Any}()
|
sp_attrs = Dict{Subplot,Any}()
|
||||||
for kw in kw_list
|
for kw in kw_list
|
||||||
# get the Subplot object to which the series belongs.
|
# get the Subplot object to which the series belongs.
|
||||||
sps = get(kw, :subplot, :auto)
|
sps = get(kw, :subplot, :auto)
|
||||||
sp = get_subplot(plt, _cycle(sps == :auto ? plt.subplots : plt.subplots[sps], command_idx(kw_list,kw)))
|
sp = get_subplot(plt, _cycle(sps == :auto ? plt.subplots : plt.subplots[sps], command_idx(kw_list,kw)))
|
||||||
kw[:subplot] = sp
|
kw[:subplot] = sp
|
||||||
|
|
||||||
# extract subplot/axis attributes from kw and add to sp_attr
|
# extract subplot/axis attributes from kw and add to sp_attr
|
||||||
attr = KW()
|
attr = KW()
|
||||||
for (k,v) in collect(kw)
|
for (k,v) in collect(kw)
|
||||||
@@ -302,7 +303,7 @@ end
|
|||||||
|
|
||||||
# getting ready to add the series... last update to subplot from anything
|
# getting ready to add the series... last update to subplot from anything
|
||||||
# that might have been added during series recipes
|
# that might have been added during series recipes
|
||||||
@noinline function _prepare_subplot(plt::Plot{T}, plotattributes::KW) where T
|
function _prepare_subplot(plt::Plot{T}, plotattributes::KW) where T
|
||||||
st::Symbol = plotattributes[:seriestype]
|
st::Symbol = plotattributes[:seriestype]
|
||||||
sp::Subplot{T} = plotattributes[:subplot]
|
sp::Subplot{T} = plotattributes[:subplot]
|
||||||
sp_idx = get_subplot_index(plt, sp)
|
sp_idx = get_subplot_index(plt, sp)
|
||||||
@@ -326,7 +327,7 @@ end
|
|||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
# series types
|
# series types
|
||||||
|
|
||||||
@noinline function _override_seriestype_check(plotattributes::KW, st::Symbol)
|
function _override_seriestype_check(plotattributes::KW, st::Symbol)
|
||||||
# do we want to override the series type?
|
# do we want to override the series type?
|
||||||
if !is3d(st) && !(st in (:contour,:contour3d))
|
if !is3d(st) && !(st in (:contour,:contour3d))
|
||||||
z = plotattributes[:z]
|
z = plotattributes[:z]
|
||||||
@@ -338,7 +339,7 @@ end
|
|||||||
st
|
st
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline function _prepare_annotations(sp::Subplot, plotattributes::KW)
|
function _prepare_annotations(sp::Subplot, plotattributes::KW)
|
||||||
# strip out series annotations (those which are based on series x/y coords)
|
# strip out series annotations (those which are based on series x/y coords)
|
||||||
# and add them to the subplot attr
|
# and add them to the subplot attr
|
||||||
sp_anns = annotations(sp[:annotations])
|
sp_anns = annotations(sp[:annotations])
|
||||||
@@ -371,7 +372,7 @@ function _expand_subplot_extrema(sp::Subplot, plotattributes::KW, st::Symbol)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline function _add_the_series(plt, sp, plotattributes)
|
function _add_the_series(plt, sp, plotattributes)
|
||||||
warnOnUnsupported_args(plt.backend, plotattributes)
|
warnOnUnsupported_args(plt.backend, plotattributes)
|
||||||
warnOnUnsupported(plt.backend, plotattributes)
|
warnOnUnsupported(plt.backend, plotattributes)
|
||||||
series = Series(plotattributes)
|
series = Series(plotattributes)
|
||||||
|
|||||||
+15
-22
@@ -4,19 +4,19 @@ mutable struct CurrentPlot
|
|||||||
end
|
end
|
||||||
const CURRENT_PLOT = CurrentPlot(nothing)
|
const CURRENT_PLOT = CurrentPlot(nothing)
|
||||||
|
|
||||||
@noinline isplotnull() = CURRENT_PLOT.nullableplot === nothing
|
isplotnull() = CURRENT_PLOT.nullableplot === nothing
|
||||||
|
|
||||||
"""
|
"""
|
||||||
current()
|
current()
|
||||||
Returns the Plot object for the current plot
|
Returns the Plot object for the current plot
|
||||||
"""
|
"""
|
||||||
@noinline function current()
|
function current()
|
||||||
if isplotnull()
|
if isplotnull()
|
||||||
error("No current plot/subplot")
|
error("No current plot/subplot")
|
||||||
end
|
end
|
||||||
CURRENT_PLOT.nullableplot
|
CURRENT_PLOT.nullableplot
|
||||||
end
|
end
|
||||||
@noinline current(plot::AbstractPlot) = (CURRENT_PLOT.nullableplot = plot)
|
current(plot::AbstractPlot) = (CURRENT_PLOT.nullableplot = plot)
|
||||||
|
|
||||||
# ---------------------------------------------------------
|
# ---------------------------------------------------------
|
||||||
|
|
||||||
@@ -25,9 +25,9 @@ Base.string(plt::Plot) = "Plot{$(plt.backend) n=$(plt.n)}"
|
|||||||
Base.print(io::IO, plt::Plot) = print(io, string(plt))
|
Base.print(io::IO, plt::Plot) = print(io, string(plt))
|
||||||
Base.show(io::IO, plt::Plot) = print(io, string(plt))
|
Base.show(io::IO, plt::Plot) = print(io, string(plt))
|
||||||
|
|
||||||
@noinline getplot(plt::Plot) = plt
|
getplot(plt::Plot) = plt
|
||||||
@noinline getattr(plt::Plot, idx::Int = 1) = plt.attr
|
getattr(plt::Plot, idx::Int = 1) = plt.attr
|
||||||
@noinline convertSeriesIndex(plt::Plot, n::Int) = n
|
convertSeriesIndex(plt::Plot, n::Int) = n
|
||||||
|
|
||||||
# ---------------------------------------------------------
|
# ---------------------------------------------------------
|
||||||
|
|
||||||
@@ -50,10 +50,11 @@ function plot(args...; kw...)
|
|||||||
# this creates a new plot with args/kw and sets it to be the current plot
|
# this creates a new plot with args/kw and sets it to be the current plot
|
||||||
plotattributes = KW(kw)
|
plotattributes = KW(kw)
|
||||||
preprocessArgs!(plotattributes)
|
preprocessArgs!(plotattributes)
|
||||||
|
|
||||||
# create an empty Plot then process
|
# create an empty Plot then process
|
||||||
plt = Plot()
|
plt = Plot()
|
||||||
# plt.user_attr = plotattributes
|
# plt.user_attr = plotattributes
|
||||||
_plot!(plt, plotattributes, Any[args...])
|
_plot!(plt, plotattributes, args)
|
||||||
end
|
end
|
||||||
|
|
||||||
# build a new plot from existing plots
|
# build a new plot from existing plots
|
||||||
@@ -154,7 +155,7 @@ function plot!(plt::Plot, args...; kw...)
|
|||||||
plotattributes = KW(kw)
|
plotattributes = KW(kw)
|
||||||
preprocessArgs!(plotattributes)
|
preprocessArgs!(plotattributes)
|
||||||
# merge!(plt.user_attr, plotattributes)
|
# merge!(plt.user_attr, plotattributes)
|
||||||
_plot!(plt, plotattributes, Any[args...])
|
_plot!(plt, plotattributes, args)
|
||||||
end
|
end
|
||||||
|
|
||||||
# -------------------------------------------------------------------------------
|
# -------------------------------------------------------------------------------
|
||||||
@@ -162,10 +163,9 @@ end
|
|||||||
# this is the core plotting function. recursively apply recipes to build
|
# this is the core plotting function. recursively apply recipes to build
|
||||||
# a list of series KW dicts.
|
# a list of series KW dicts.
|
||||||
# note: at entry, we only have those preprocessed args which were passed in... no default values yet
|
# note: at entry, we only have those preprocessed args which were passed in... no default values yet
|
||||||
function _plot!(plt::Plot{T}, plotattributes::KW, args::Vector{Any}) where {T}
|
function _plot!(plt::Plot, plotattributes::KW, args::Tuple)
|
||||||
plotattributes[:plot_object] = plt
|
plotattributes[:plot_object] = plt
|
||||||
|
|
||||||
|
|
||||||
if !isempty(args) && !isdefined(Main, :StatsPlots) &&
|
if !isempty(args) && !isdefined(Main, :StatsPlots) &&
|
||||||
first(split(string(typeof(args[1])), ".")) == "DataFrames"
|
first(split(string(typeof(args[1])), ".")) == "DataFrames"
|
||||||
@warn("You're trying to plot a DataFrame, but this functionality is provided by StatsPlots")
|
@warn("You're trying to plot a DataFrame, but this functionality is provided by StatsPlots")
|
||||||
@@ -175,7 +175,6 @@ function _plot!(plt::Plot{T}, plotattributes::KW, args::Vector{Any}) where {T}
|
|||||||
# "USER RECIPES"
|
# "USER RECIPES"
|
||||||
# --------------------------------
|
# --------------------------------
|
||||||
|
|
||||||
# 1 second
|
|
||||||
kw_list = _process_userrecipes(plt, plotattributes, args)
|
kw_list = _process_userrecipes(plt, plotattributes, args)
|
||||||
|
|
||||||
# @info(1)
|
# @info(1)
|
||||||
@@ -190,7 +189,6 @@ function _plot!(plt::Plot{T}, plotattributes::KW, args::Vector{Any}) where {T}
|
|||||||
# the plot layout is created, which allows for setting layouts and other plot-wide attributes.
|
# the plot layout is created, which allows for setting layouts and other plot-wide attributes.
|
||||||
# we get inputs which have been fully processed by "user recipes" and "type recipes",
|
# we get inputs which have been fully processed by "user recipes" and "type recipes",
|
||||||
# so we can expect standard vectors, surfaces, etc. No defaults have been set yet.
|
# so we can expect standard vectors, surfaces, etc. No defaults have been set yet.
|
||||||
|
|
||||||
still_to_process = kw_list
|
still_to_process = kw_list
|
||||||
kw_list = KW[]
|
kw_list = KW[]
|
||||||
while !isempty(still_to_process)
|
while !isempty(still_to_process)
|
||||||
@@ -204,11 +202,7 @@ function _plot!(plt::Plot{T}, plotattributes::KW, args::Vector{Any}) where {T}
|
|||||||
# --------------------------------
|
# --------------------------------
|
||||||
# Plot/Subplot/Layout setup
|
# Plot/Subplot/Layout setup
|
||||||
# --------------------------------
|
# --------------------------------
|
||||||
|
|
||||||
# 2.5 seconds
|
|
||||||
_plot_setup(plt, plotattributes, kw_list)
|
_plot_setup(plt, plotattributes, kw_list)
|
||||||
|
|
||||||
# 6 seconds
|
|
||||||
_subplot_setup(plt, plotattributes, kw_list)
|
_subplot_setup(plt, plotattributes, kw_list)
|
||||||
|
|
||||||
# !!! note: At this point, kw_list is fully decomposed into individual series... one KW per series. !!!
|
# !!! note: At this point, kw_list is fully decomposed into individual series... one KW per series. !!!
|
||||||
@@ -222,7 +216,7 @@ function _plot!(plt::Plot{T}, plotattributes::KW, args::Vector{Any}) where {T}
|
|||||||
# map(DD, kw_list)
|
# map(DD, kw_list)
|
||||||
|
|
||||||
for kw in kw_list
|
for kw in kw_list
|
||||||
sp::Subplot{T} = kw[:subplot]
|
sp::Subplot = kw[:subplot]
|
||||||
# idx = get_subplot_index(plt, sp)
|
# idx = get_subplot_index(plt, sp)
|
||||||
|
|
||||||
# # we update subplot args in case something like the color palatte is part of the recipe
|
# # we update subplot args in case something like the color palatte is part of the recipe
|
||||||
@@ -239,9 +233,9 @@ function _plot!(plt::Plot{T}, plotattributes::KW, args::Vector{Any}) where {T}
|
|||||||
# be able to support step, bar, and histogram plots (and any recipes that use those components).
|
# be able to support step, bar, and histogram plots (and any recipes that use those components).
|
||||||
_process_seriesrecipe(plt, kw)
|
_process_seriesrecipe(plt, kw)
|
||||||
end
|
end
|
||||||
|
|
||||||
# --------------------------------
|
# --------------------------------
|
||||||
|
|
||||||
# 7 seconds
|
|
||||||
current(plt)
|
current(plt)
|
||||||
|
|
||||||
# do we want to force display?
|
# do we want to force display?
|
||||||
@@ -249,14 +243,14 @@ function _plot!(plt::Plot{T}, plotattributes::KW, args::Vector{Any}) where {T}
|
|||||||
# gui(plt)
|
# gui(plt)
|
||||||
# end
|
# end
|
||||||
_do_plot_show(plt, plt[:show])
|
_do_plot_show(plt, plt[:show])
|
||||||
|
|
||||||
plt
|
plt
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
# we're getting ready to display/output. prep for layout calcs, then update
|
# we're getting ready to display/output. prep for layout calcs, then update
|
||||||
# the plot object after
|
# the plot object after
|
||||||
@noinline function prepare_output(plt::Plot)
|
function prepare_output(plt::Plot)
|
||||||
|
|
||||||
_before_layout_calcs(plt)
|
_before_layout_calcs(plt)
|
||||||
|
|
||||||
w, h = plt.attr[:size]
|
w, h = plt.attr[:size]
|
||||||
@@ -277,10 +271,9 @@ end
|
|||||||
|
|
||||||
# the backend callback, to reposition subplots, etc
|
# the backend callback, to reposition subplots, etc
|
||||||
_update_plot_object(plt)
|
_update_plot_object(plt)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@noinline function backend_object(plt::Plot)
|
function backend_object(plt::Plot)
|
||||||
prepare_output(plt)
|
prepare_output(plt)
|
||||||
plt.o
|
plt.o
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,3 +1,854 @@
|
|||||||
function _precompile_()
|
function _precompile_()
|
||||||
ccall(:jl_generating_output, Cint, ()) == 1 || return nothing
|
ccall(:jl_generating_output, Cint, ()) == 1 || return nothing
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{}})
|
||||||
|
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.legendtitlefont), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.pie_labels), Plots.Subplot{Plots.GRBackend}, Plots.Series})
|
||||||
|
precompile(Tuple{typeof(Plots.should_add_to_legend), Plots.Series})
|
||||||
|
precompile(Tuple{typeof(Plots.shape_data), Plots.Series, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.preprocessArgs!), Base.Dict{Symbol, Any}})
|
||||||
|
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._backend_instance), Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.replaceAlias!), Base.Dict{Symbol, Any}, Symbol, Base.Dict{Symbol, Symbol}})
|
||||||
|
precompile(Tuple{typeof(Plots.preprocessArgs!), Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, Array{Array{T, 1} where T, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Base.StepRange{Int64, Int64}, Array{Float64, 2}}})
|
||||||
|
precompile(Tuple{typeof(Plots.optimal_ticks_and_labels), Plots.Subplot{Plots.GRBackend}, Plots.Axis, Nothing})
|
||||||
|
precompile(Tuple{typeof(Plots.straightline_data), Tuple{Int64, Int64}, Tuple{Float64, Float64}, Array{Float64, 1}, Array{Float64, 1}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.convert_to_polar), Array{Float64, 1}, Array{Float64, 1}, Tuple{Int64, Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_inqtext), Int64, Int64, String})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_draw_marker), Int64, Float64, Int64, Plots.Shape})
|
||||||
|
precompile(Tuple{typeof(Plots.nanappend!), Array{Float64, 1}, Array{Float64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_draw_marker), Int64, Int64, Int64, Plots.Shape})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_draw_marker), Float64, Float64, Int64, Plots.Shape})
|
||||||
|
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{String, 1}, Array{String, 1}, Array{Float64, 2}}})
|
||||||
|
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{Plots.Spy}})
|
||||||
|
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.recompute_lengths), Array{Measures.Measure, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Base.UnitRange{Int64}}})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{Float64, 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._heatmap_edges), Array{Float64, 1}, Bool})
|
||||||
|
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{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots.get_minor_ticks), Plots.Subplot{Plots.GRBackend}, Plots.Axis, Tuple{Array{Float64, 1}, Array{Any, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots._preprocess_binlike), Base.Dict{Symbol, Any}, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, 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{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 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{Function, 1}, Array{Float64, 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{Float64, 2}}})
|
||||||
|
precompile(Tuple{typeof(Plots.__init__)})
|
||||||
|
precompile(Tuple{typeof(Plots.warnOnUnsupported), Plots.GRBackend, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.iscontour), Plots.Series})
|
||||||
|
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{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{Array{Float64, 1}, Array{Float64, 1}, Base.UnitRange{Int64}}})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.PortfolioComposition}})
|
||||||
|
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{Plots.OHLC{T} where T<:Real, 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{Array{T, 1} where T, 1}, Array{Float64, 2}}})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}, Array{Float64, 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.gr_text), Float64, Float64, String})
|
||||||
|
precompile(Tuple{typeof(Plots.layout_args), Base.Dict{Symbol, Any}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.iscontour), Plots.Series})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{Array{T, 1} where T, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots.axis_drawing_info), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.link_subplots), Array{RecipesBase.AbstractLayout, 1}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.axis_drawing_info), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_get_color), Plots.Series})
|
||||||
|
precompile(Tuple{typeof(Plots.showaxis), Symbol, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.build_layout), Plots.GridLayout, Int64, Array{Plots.Plot{T} where T<:RecipesBase.AbstractBackend, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{}})
|
||||||
|
precompile(Tuple{typeof(Plots.default), Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.add_layout_pct!), Base.Dict{Symbol, Any}, Expr, Int64, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_xaxis_height), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_draw_marker), Int64, Float64, Float64, Plots.Shape})
|
||||||
|
precompile(Tuple{typeof(Plots.warnOnUnsupported_args), Plots.GRBackend, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_xaxis_height), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_set_viewport_cmap), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_set_linecolor), PlotUtils.ColorGradient})
|
||||||
|
precompile(Tuple{typeof(Plots.contour_levels), Plots.Series, Tuple{Float64, Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots._scale_adjusted_values), Type{Float64}, Array{Float64, 1}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.has_attribute_segments), Plots.Series})
|
||||||
|
precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 2}}})
|
||||||
|
precompile(Tuple{typeof(Plots.isijulia)})
|
||||||
|
precompile(Tuple{typeof(Plots.get_clims), Plots.Series})
|
||||||
|
precompile(Tuple{typeof(Plots.build_layout), Plots.GridLayout, Int64, Array{Plots.Plot{T} where T<:RecipesBase.AbstractBackend, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.process_axis_arg!), Base.Dict{Symbol, Any}, Base.StepRange{Int64, Int64}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.prepareSeriesData), Array{Float64, 2}})
|
||||||
|
precompile(Tuple{typeof(Plots.processLineArg), Base.Dict{Symbol, Any}, Array{Symbol, 2}})
|
||||||
|
precompile(Tuple{typeof(Plots.get_clims), Plots.Series})
|
||||||
|
precompile(Tuple{typeof(Plots.color_or_nothing!), Base.Dict{Symbol, Any}, Symbol})
|
||||||
|
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_display), Plots.Plot{Plots.GRBackend}, String})
|
||||||
|
precompile(Tuple{typeof(Plots.default_should_widen), Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_legend_pos), Plots.Subplot{Plots.GRBackend}, Float64, Float64})
|
||||||
|
precompile(Tuple{typeof(Plots._plots_defaults)})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_draw_colorbar), Plots.GRColorbar, Plots.Subplot{Plots.GRBackend}, Tuple{Float64, Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots.layout_args), Base.Dict{Symbol, Any}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.default_should_widen), Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots.build_layout), Plots.GridLayout, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_polaraxes), Int64, Float64, Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.isvertical), Base.Dict{Symbol, Any}})
|
||||||
|
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.get_markercolor), Plots.Series, Float64, Float64, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots._preprocess_barlike), Base.Dict{Symbol, Any}, Array{Int64, 1}, Array{Float64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.process_axis_arg!), Base.Dict{Symbol, Any}, Tuple{Int64, Int64}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots._backend_instance), Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.has_attribute_segments), Plots.Series})
|
||||||
|
precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Base.StepRange{Int64, Int64}, Array{Float64, 2}}})
|
||||||
|
precompile(Tuple{typeof(Plots._preprocess_barlike), Base.Dict{Symbol, Any}, Array{Float64, 1}, Array{Float64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{}})
|
||||||
|
precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, Array{Union{Base.Missing, Int64}, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.hasgrid), Symbol, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.prepareSeriesData), Array{Union{Base.Missing, Number}, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.get_markercolor), Plots.Series, Float64, Float64, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.process_annotation), Plots.Subplot{Plots.GRBackend}, Int64, Float64, Plots.PlotText, Plots.Font})
|
||||||
|
precompile(Tuple{typeof(Plots.prepareSeriesData), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}})
|
||||||
|
precompile(Tuple{typeof(Plots.convertToAnyVector), Array{Array{T, 1} where T, 1}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.backend), Plots.GRBackend})
|
||||||
|
precompile(Tuple{typeof(Plots._hist_edges), Tuple{Array{Float64, 1}, Array{Float64, 1}}, Tuple{Int64, Int64}})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Base.StepRange{Int64, Int64}, Array{Float64, 2}}})
|
||||||
|
precompile(Tuple{typeof(Plots.is_attr_supported), Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.axis_limits), Plots.Subplot{Plots.GRBackend}, Symbol, Bool, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.discrete_value!), Plots.Axis, Char})
|
||||||
|
precompile(Tuple{typeof(Plots._cbar_unique), Array{Symbol, 1}, String})
|
||||||
|
precompile(Tuple{typeof(Plots._hist_edges), Tuple{Array{Float64, 1}, Array{Float64, 1}}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots._cbar_unique), Array{Int64, 1}, String})
|
||||||
|
precompile(Tuple{typeof(Plots.convertToAnyVector), Int64, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.handleColors!), Base.Dict{Symbol, Any}, Array{Symbol, 2}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.prepareSeriesData), Array{Int64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.frame), Plots.Animation})
|
||||||
|
precompile(Tuple{typeof(Plots.shape_data), Plots.Series, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Subplot{Plots.GRBackend}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Float64})
|
||||||
|
precompile(Tuple{typeof(Plots._cbar_unique), Array{Nothing, 1}, String})
|
||||||
|
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._cbar_unique), Array{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, 1}, String})
|
||||||
|
precompile(Tuple{typeof(Plots.processLineArg), Base.Dict{Symbol, Any}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots._bin_centers), Array{Float64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.addExtension), String, String})
|
||||||
|
precompile(Tuple{typeof(Plots.process_axis_arg!), Base.Dict{Symbol, Any}, String, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.create_grid), Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.getxy), Plots.Plot{Plots.GRBackend}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.straightline_data), Plots.Series, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_display), Plots.Plot{Plots.GRBackend}, String})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Plots.Spy}})
|
||||||
|
precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Subplot{Plots.GRBackend}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.make_steps), Base.UnitRange{Int64}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots._update_axis), Plots.Axis, Base.Dict{Symbol, Any}, Symbol, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{Union{Base.Missing, Int64}, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_get_color), Plots.Series})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Array{Int64, 1}, Array{Float64, 1}, Tuple{Float64, Float64}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.is_seriestype_supported), Plots.GRBackend, Symbol})
|
||||||
|
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.get_xy), Plots.OHLC{Float64}, Int64, Float64})
|
||||||
|
precompile(Tuple{typeof(Plots._cbar_unique), Array{PlotUtils.ColorGradient, 1}, String})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{Base.Complex{Float64}, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots.series_annotations_shapes!), Plots.Series, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, Array{Function, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy}})
|
||||||
|
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.ensure_gradient!), Base.Dict{Symbol, Any}, Symbol, Symbol})
|
||||||
|
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._apply_type_recipe), Base.Dict{Symbol, Any}, Array{Array{Float64, 1}, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.warnOnUnsupported_scales), Plots.GRBackend, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Array{Float64, 1}, Array{Float64, 1}, Tuple{Float64, Float64}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots._plot_setup), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Array{Base.Dict{Symbol, Any}, 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.UnitRange{Int64}}})
|
||||||
|
precompile(Tuple{typeof(Plots.is_marker_supported), Plots.GRBackend, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.wand_edges), Array{Float64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.optimal_ticks_and_labels), Plots.Subplot{Plots.GRBackend}, Plots.Axis, Base.UnitRange{Int64}})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg), Base.ReshapedArray{Int64, 2, Base.UnitRange{Int64}, Tuple{}}, Int64})
|
||||||
|
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, Array{String, 1}, Array{Float64, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, typeof(Base.log), Int64}})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{Function, 1}, Int64}})
|
||||||
|
precompile(Tuple{typeof(Plots._series_index), Base.Dict{Symbol, Any}, Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Plots.PortfolioComposition}})
|
||||||
|
precompile(Tuple{typeof(Plots.optimal_ticks_and_labels), Plots.Subplot{Plots.GRBackend}, Plots.Axis, Base.StepRange{Int64, Int64}})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{Array{Float64, 1}, 1}, Array{Array{Float64, 1}, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots._update_series_attributes!), Base.Dict{Symbol, Any}, Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{Float64, 1}, Array{Float64, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots.handleColors!), Base.Dict{Symbol, Any}, Symbol, Symbol})
|
||||||
|
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.warnOnUnsupported_args), Plots.GRBackend, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots._update_min_padding!), Plots.GridLayout})
|
||||||
|
precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Union{Base.Missing, Int64}, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_set_gradient), PlotUtils.ColorGradient})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy}})
|
||||||
|
precompile(Tuple{typeof(Plots.titlefont), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
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{Plots.OHLC{T} where T<:Real, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots.axis_limits), Plots.Subplot{Plots.GRBackend}, Symbol, Bool, Bool})
|
||||||
|
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._update_subplot_periphery), Plots.Subplot{Plots.GRBackend}, Array{Any, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{Array{T, 1} where T, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots.unzip), Array{Tuple{Float64, Float64, 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{Array{T, 1} where T, 1}, Array{Float64, 2}}})
|
||||||
|
precompile(Tuple{typeof(Plots.command_idx), Array{Base.Dict{Symbol, Any}, 1}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_get_ticks_size), Tuple{Array{Float64, 1}, Array{Any, 1}}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.prepareSeriesData), Array{Union{Base.Missing, Int64}, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.prepareSeriesData), Base.LinRange{Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg), Array{Measures.Length{:mm, Float64}, 2}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Plots.GroupBy, Array{Int64, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots._update_min_padding!), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
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.expand_extrema!), Plots.Axis, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}})
|
||||||
|
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{Plots.Spy}})
|
||||||
|
precompile(Tuple{typeof(Plots._plot_setup), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Array{Base.Dict{Symbol, Any}, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.aliasesAndAutopick), Base.Dict{Symbol, Any}, Symbol, Base.Dict{Symbol, Symbol}, Array{Symbol, 1}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.colorbar_style), Plots.Series})
|
||||||
|
precompile(Tuple{typeof(Plots._update_subplot_periphery), Plots.Subplot{Plots.GRBackend}, Array{Any, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.fakedata), Int64, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots.autopick_ignore_none_auto), Array{Symbol, 1}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.discrete_value!), Plots.Axis, Base.Missing})
|
||||||
|
precompile(Tuple{typeof(Plots._add_defaults!), Base.Dict{Symbol, Any}, Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots._cycle), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.make_steps), Array{Int64, 1}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_set_line), Float64, Symbol, ColorTypes.RGBA{Float64}})
|
||||||
|
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.make_fillrange_side), Array{Float64, 1}, Array{Float64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots._update_min_padding!), Plots.GridLayout})
|
||||||
|
precompile(Tuple{typeof(Plots._add_defaults!), Base.Dict{Symbol, Any}, Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots._process_seriesrecipe), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots._add_markershape), Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}})
|
||||||
|
precompile(Tuple{typeof(Plots.ispolar), Plots.Series})
|
||||||
|
precompile(Tuple{typeof(Plots._hist_edges), Tuple{Array{Float64, 1}}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 2}}})
|
||||||
|
precompile(Tuple{typeof(Plots.make_steps), Array{Float64, 1}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Base.Complex{Float64}, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots.filter_data), Base.UnitRange{Int64}, Array{Int64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.create_grid_curly), Expr})
|
||||||
|
precompile(Tuple{typeof(Plots.prepareSeriesData), Array{Float64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots._show), Base.IOStream, Base.Multimedia.MIME{Symbol("image/png")}, Plots.Plot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Base.UnitRange{Int64}}})
|
||||||
|
precompile(Tuple{typeof(Plots._binbarlike_baseline), Float64, Symbol})
|
||||||
|
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.get_ticks), Plots.Subplot{Plots.GRBackend}, Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots.colorbar_style), Plots.Series})
|
||||||
|
precompile(Tuple{typeof(Plots.ensure_gradient!), Base.Dict{Symbol, Any}, Symbol, Symbol})
|
||||||
|
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}}, 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{Array{String, 1}, Array{Float64, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots.get_linecolor), Plots.Series, Float64, Float64, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{typeof(Base.log), Int64}})
|
||||||
|
precompile(Tuple{typeof(Plots.processLineArg), Base.Dict{Symbol, Any}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.make_fillrange_from_ribbon), Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.is_scale_supported), Plots.GRBackend, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.isvertical), Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, 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{Plots.PortfolioComposition}})
|
||||||
|
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.gr_set_line), Int64, Symbol, ColorTypes.RGBA{Float64}})
|
||||||
|
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.processGridArg!), Base.Dict{Symbol, Any}, Symbol, Symbol})
|
||||||
|
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.get_linecolor), Plots.Series, Float64, Float64, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.supported_markers)})
|
||||||
|
precompile(Tuple{typeof(Plots.warnOnUnsupported), Plots.GRBackend, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots._process_seriesrecipe), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}, Array{Float64, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots.discrete_value!), Plots.Axis, String})
|
||||||
|
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{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._add_markershape), Base.Dict{Symbol, Any}})
|
||||||
|
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.gr_lims), Plots.Subplot{Plots.GRBackend}, Plots.Axis, Bool, Nothing})
|
||||||
|
precompile(Tuple{typeof(Plots.processLineArg), Base.Dict{Symbol, Any}, Array{Symbol, 2}})
|
||||||
|
precompile(Tuple{typeof(Plots._add_smooth_kw), Array{Base.Dict{Symbol, Any}, 1}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.supported_styles)})
|
||||||
|
precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, Array{Symbol, 2}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_fill_viewport), Array{Float64, 1}, ColorTypes.RGBA{Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots.update_child_bboxes!), Plots.GridLayout, Array{Measures.Length{:mm, Float64}, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Int64, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots._process_seriesrecipe), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.warnOnUnsupported_scales), Plots.GRBackend, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, Array{Function, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.get_xy), Array{Plots.OHLC{T} where T<:Real, 1}, Base.UnitRange{Int64}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_text), Float64, Float64, String})
|
||||||
|
precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, Array{Symbol, 2}})
|
||||||
|
precompile(Tuple{typeof(Plots.like_histogram), Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.compute_gridsize), Int64, Int64, Int64})
|
||||||
|
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.get_ticks), Plots.Subplot{Plots.GRBackend}, Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots.is_marker_supported), Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_set_viewport_polar)})
|
||||||
|
precompile(Tuple{typeof(Plots._pick_default_backend)})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, Tuple{Int64, Int64}, Int64, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots._preprocess_userrecipe), Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Plots.Surface{Array{Float64, 2}}})
|
||||||
|
precompile(Tuple{typeof(Plots.all3D), Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.make_fillrange_side), Array{Float64, 1}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.reset_extrema!), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots._replace_linewidth), Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Array{Int64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.process_axis_arg!), Base.Dict{Symbol, Any}, Symbol, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.processGridArg!), Base.Dict{Symbol, Any}, Float64, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.get_fillcolor), Plots.Series, Float64, Float64, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Array{Float64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg), Array{ColorTypes.RGBA{Float64}, 2}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.should_add_to_legend), Plots.Series})
|
||||||
|
precompile(Tuple{typeof(Plots.reset_extrema!), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, Plots.Shape})
|
||||||
|
precompile(Tuple{typeof(Plots.is3d), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, Int64, Int64, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, Bool, Int64, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.processLineArg), Base.Dict{Symbol, Any}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_draw_marker), Float64, Float64, Int64, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, Symbol, Int64, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots._update_series_attributes!), Base.Dict{Symbol, Any}, Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_yaxis_width), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, Nothing, Int64, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, Measures.Length{:mm, Float64}, Int64, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.transpose_z), Plots.Series, Array{Float64, 2}, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Plots.Surface{Array{Float64, 2}}})
|
||||||
|
precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, ColorTypes.RGBA{Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, Float64, Int64, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, String, Int64, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, Array{Any, 1}, Int64, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.xlims), Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, Base.Dict{Symbol, Any}, Int64, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.processGridArg!), Base.Dict{Symbol, Any}, Int64, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.create_grid_curly), Expr})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg), Array{String, 2}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{}})
|
||||||
|
precompile(Tuple{typeof(Plots._update_min_padding!), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg), Array{Symbol, 2}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.ignorenan_extrema), Array{Float64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Base.UnitRange{Int64}})
|
||||||
|
precompile(Tuple{typeof(Plots.get_linealpha), Plots.Series, 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.expand_extrema!), Plots.Axis, Tuple{Float64, Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots.handleColors!), Base.Dict{Symbol, Any}, Symbol, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_yaxis_width), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.handleColors!), Base.Dict{Symbol, Any}, Symbol, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.extendSeriesData), Array{Float64, 1}, Float64})
|
||||||
|
precompile(Tuple{typeof(Plots.is_style_supported), Plots.GRBackend, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, Tuple{Int64, Int64}, Int64, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots._replace_linewidth), 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._pick_default_backend)})
|
||||||
|
precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 2}}})
|
||||||
|
precompile(Tuple{typeof(Plots.ignorenan_minimum), Array{Int64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots._add_errorbar_kw), Array{Base.Dict{Symbol, Any}, 1}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.filter_data), Array{Float64, 1}, Array{Int64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.convert_sci_unicode), String})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_draw_marker), Int64, Int64, Int64, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, Nothing, Int64, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots._get_defaults), Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_inqtext), Int64, Int64, String})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_set_fillcolor), ColorTypes.RGBA{Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, typeof(identity)})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_set_fill), ColorTypes.RGBA{Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots.fakedata), Int64, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, Float64, Int64, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, String, Int64, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Base.UnitRange{Int64}})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, Bool, Int64, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_draw_marker), Int64, Float64, Int64, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, Measures.Length{:mm, Float64}, Int64, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, Int64, Int64, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, Symbol, Int64, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.prepareSeriesData), Array{Int32, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_draw_marker), Int64, Float64, Float64, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, Array{Any, 1}, Int64, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, Base.Dict{Symbol, Any}, Int64, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.discrete_value!), Plots.Axis, Array{Any, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.create_grid_vcat), Expr})
|
||||||
|
precompile(Tuple{typeof(Plots.calc_num_subplots), Plots.GridLayout})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Array{Float64, 1}, Array{Float64, 1}, Tuple{Float64, Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_set_textcolor), ColorTypes.RGBA{Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots.fg_color), Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.update_inset_bboxes!), Plots.Plot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.ignorenan_extrema), Array{Float64, 2}})
|
||||||
|
precompile(Tuple{typeof(Plots.like_surface), Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_set_xticks_font), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.update_child_bboxes!), Plots.GridLayout, Array{Measures.Length{:mm, Float64}, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.backend), Symbol})
|
||||||
|
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.is3d), Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.iter_segments), Array{Float64, 1}, Array{Float64, 1}, Array{Float64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Base.StepRange{Int64, Int64}, Array{Float64, 2}}})
|
||||||
|
precompile(Tuple{typeof(Plots.get_fillalpha), Plots.Series, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots._plot!), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{}})
|
||||||
|
precompile(Tuple{typeof(Plots._cycle), Base.StepRange{Int64, Int64}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.series_annotations), Array{Any, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.convertLegendValue), Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.compute_xyz), Nothing, Nothing, Nothing})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_text_size), String})
|
||||||
|
precompile(Tuple{typeof(Plots.backend), Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_set_markercolor), ColorTypes.RGBA{Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots.ignorenan_maximum), Array{Float64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_set_yticks_font), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.legendfont), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
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, Array{Int64, 1}, Array{Float64, 1}, Tuple{Float64, Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots.update_inset_bboxes!), Plots.Plot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_set_yticks_font), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.iter_segments), Base.UnitRange{Int64}, Array{Float64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.hascolorbar), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.ignorenan_extrema), Base.StepRange{Int64, Int64}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_get_ticks_size), Tuple{Array{Float64, 1}, Array{String, 1}}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Array{Float64, 1}, Array{Float64, 1}, Tuple{Float64, Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots.get_minor_ticks), Plots.Subplot{Plots.GRBackend}, Plots.Axis, Nothing})
|
||||||
|
precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.straightline_data), Plots.Series, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Tuple{Float64, Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots.is3d), Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.arrow), Int64})
|
||||||
|
precompile(Tuple{typeof(Plots._cycle), Array{Float64, 1}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.link_axes!), Plots.Axis, Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots.setxy!), Plots.Plot{Plots.GRBackend}, Tuple{Array{Float64, 1}, Array{Float64, 1}}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.heatmap_edges), Array{Float64, 1}, Symbol, Array{Float64, 1}, Symbol, Tuple{Int64, Int64}})
|
||||||
|
precompile(Tuple{typeof(Plots._update_series_attributes!), Base.Dict{Symbol, Any}, Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.link_axes!), Plots.Axis, Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots.compute_xyz), Array{Float64, 1}, typeof(identity), Nothing})
|
||||||
|
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._preprocess_userrecipe), Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots._update_plot_args), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.iter_segments), Plots.Series})
|
||||||
|
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.processMarkerArg), Base.Dict{Symbol, Any}, Plots.Stroke})
|
||||||
|
precompile(Tuple{typeof(Plots._update_axis_links), Plots.Plot{Plots.GRBackend}, Plots.Axis, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.autopick), Array{ColorTypes.RGBA{Float64}, 1}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.wrap_surfaces), Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots._update_clims), Float64, Float64, Int64, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.filter_data!), Base.Dict{Symbol, Any}, Array{Int64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.heatmap_edges), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Symbol, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots._subplot_setup), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Array{Base.Dict{Symbol, Any}, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.legendfont), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.ensure_gradient!), Base.Dict{Symbol, Any}, Symbol, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.layout_args), Tuple{Int64, Int64}})
|
||||||
|
precompile(Tuple{typeof(Plots._cycle), Base.UnitRange{Int64}, Array{Int64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots._cycle), Array{Any, 1}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_get_ticks_size), Tuple{Array{Float64, 1}, Array{String, 1}}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.rowsize), Expr})
|
||||||
|
precompile(Tuple{typeof(Plots.processFillArg), Base.Dict{Symbol, Any}, Float64})
|
||||||
|
precompile(Tuple{typeof(Plots.tickfont), Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots.heatmap_edges), Array{Float64, 1}, Symbol, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Base.UnitRange{Int64}, Array{Float64, 1}, Tuple{Float64, Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots.process_ribbon), Tuple{Base.LinRange{Float64}, Base.LinRange{Float64}}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.is_attr_supported), Plots.GRBackend, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.get_series_color), ColorTypes.RGBA{Float64}, Plots.Subplot{Plots.GRBackend}, Int64, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.inline), Plots.Plot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots._cycle), Array{Plots.Subplot{T} where T<:RecipesBase.AbstractBackend, 1}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.build_layout), Plots.GridLayout, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.convertToAnyVector), Array{Function, 1}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.splittable_kw), Symbol, Array{String, 1}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.get_markerstrokecolor), Plots.Series, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots._update_clims), Float64, Float64, Float64, Float64})
|
||||||
|
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._cycle), Array{String, 1}, Int64})
|
||||||
|
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.color_or_nothing!), Base.Dict{Symbol, Any}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.fg_color), Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots._override_seriestype_check), Base.Dict{Symbol, Any}, Symbol})
|
||||||
|
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.get_series_color), Int64, Plots.Subplot{Plots.GRBackend}, Int64, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.get_linewidth), Plots.Series, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Plots.Spy}})
|
||||||
|
isdefined(Plots, Symbol("#scatter!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#scatter!##kw")), NamedTuple{(:markersize, :c), Tuple{Int64, Symbol}}, typeof(Plots.scatter!), 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._update_axis), Plots.Axis, Base.Dict{Symbol, Any}, Symbol, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.compute_xyz), Nothing, Array{Union{Base.Missing, Float64}, 1}, Nothing})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_set_transparency), ColorTypes.RGBA{Float64}, Float64})
|
||||||
|
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._update_subplot_args), Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Int64, Bool})
|
||||||
|
isdefined(Plots, Symbol("#heatmap##kw")) && precompile(Tuple{getfield(Plots, Symbol("#heatmap##kw")), NamedTuple{(:aspect_ratio,), Tuple{Int64}}, typeof(Plots.heatmap), Array{String, 1}, Int})
|
||||||
|
precompile(Tuple{typeof(Plots.compute_xyz), Array{String, 1}, Array{Float64, 1}, Nothing})
|
||||||
|
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})
|
||||||
|
precompile(Tuple{typeof(Plots.splittable_kw), Symbol, Array{Int64, 1}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.get_series_color), Symbol, Plots.Subplot{Plots.GRBackend}, Int64, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.tovec), Array{Float64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.get_linestyle), Plots.Series, Int64})
|
||||||
|
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{}})
|
||||||
|
precompile(Tuple{typeof(Plots.get_series_color), ColorTypes.RGBA{Float64}, Plots.Subplot{Plots.GRBackend}, Int64, Symbol})
|
||||||
|
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})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_seriestype_array), Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}, 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}})
|
||||||
|
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._show), Base.IOStream, Base.Multimedia.MIME{Symbol("image/png")}, Plots.Plot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 2}}})
|
||||||
|
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.xlims), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.process_ribbon), Int64, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Base.UnitRange{Int64}}})
|
||||||
|
precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Base.Complex{Float64}, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots.backend)})
|
||||||
|
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.link_axes!), Plots.GridLayout, Symbol})
|
||||||
|
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}})
|
||||||
|
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{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots.splittable_kw), Symbol, Array{Symbol, 2}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots._do_plot_show), Plots.Plot{Plots.GRBackend}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Base.StepRange{Int64, Int64}, Array{Float64, 2}}, Array{RecipesBase.RecipeData, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Array{Float64, 1}, Array{Float64, 1}, Tuple{Float64, Float64}, Int64})
|
||||||
|
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.processFillArg), Base.Dict{Symbol, Any}, Bool})
|
||||||
|
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{Array{Float64, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots.compute_xyz), Array{String, 1}, Array{String, 1}, Plots.Surface{Array{Float64, 2}}})
|
||||||
|
precompile(Tuple{typeof(Plots.processFillArg), Base.Dict{Symbol, Any}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.process_ribbon), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_text_size), String, 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.layout_args), Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.process_fillrange), Int64, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.processLineArg), Base.Dict{Symbol, Any}, Float64})
|
||||||
|
precompile(Tuple{typeof(Plots.get_clims), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
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._display), Plots.Plot{Plots.GRBackend}})
|
||||||
|
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._update_axis_links), Plots.Plot{Plots.GRBackend}, Plots.Axis, Symbol})
|
||||||
|
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.gr_set_font), Plots.Font})
|
||||||
|
precompile(Tuple{typeof(Plots.get_markeralpha), Plots.Series, Int64})
|
||||||
|
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{Plots.PortfolioComposition}})
|
||||||
|
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{Float64, 1}, Array{Float64, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots.legendtitlefont), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Int64, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Base.UnitRange{Int64}, Array{Float64, 1}, Tuple{Float64, Float64}, Array{Float64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.get_clims), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.is_2tuple), Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.is_marker_supported), Plots.Shape})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_colorbar_colors), Plots.Series, Tuple{Float64, Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, Float64})
|
||||||
|
precompile(Tuple{typeof(Plots.iter_segments), Array{Int64, 1}, Array{Float64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.get_markerstrokealpha), Plots.Series, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{}})
|
||||||
|
precompile(Tuple{typeof(Plots._hist_edge), Tuple{Array{Float64, 1}}, Int64, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots._update_axis_colors), Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots.xgrid!), Plots.Plot{Plots.GRBackend}, Symbol, Int})
|
||||||
|
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{Float64, 1}}, Array{RecipesBase.RecipeData, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots._cycle), Array{Float64, 1}, Base.UnitRange{Int64}})
|
||||||
|
precompile(Tuple{typeof(Plots.get_series_color), PlotUtils.ColorGradient, Plots.Subplot{Plots.GRBackend}, Int64, Symbol})
|
||||||
|
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})
|
||||||
|
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})
|
||||||
|
precompile(Tuple{typeof(Plots.processFillArg), Base.Dict{Symbol, Any}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Float64, 2}}, Array{RecipesBase.RecipeData, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.yaxis!), String, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.ignorenan_maximum), Base.UnitRange{Int64}})
|
||||||
|
precompile(Tuple{typeof(Plots._update_plot_args), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}})
|
||||||
|
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}})
|
||||||
|
precompile(Tuple{typeof(Plots.ignorenan_minimum), Base.UnitRange{Int64}})
|
||||||
|
precompile(Tuple{typeof(Plots._prepare_annotations), Plots.Subplot{Plots.GRBackend}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.extractGroupArgs), Array{String, 1}, Array{Float64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots._cycle), Array{Float64, 1}, Base.StepRange{Int64, Int64}})
|
||||||
|
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.handleColors!), Base.Dict{Symbol, Any}, ColorTypes.RGBA{Float64}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots._do_plot_show), Plots.Plot{Plots.GRBackend}, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.text), String, Symbol, Int64, Int})
|
||||||
|
precompile(Tuple{typeof(Plots.font), Int64, Int})
|
||||||
|
precompile(Tuple{typeof(Plots.ispolar), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots._prepare_subplot), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.processGridArg!), Base.Dict{Symbol, Any}, Bool, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots._cycle), Int64, Base.StepRange{Int64, Int64}})
|
||||||
|
precompile(Tuple{typeof(Plots.font), Symbol, Int})
|
||||||
|
precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Plots.Spy}, Array{RecipesBase.RecipeData, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.guidefont), Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots._add_the_series), Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots._update_axis_colors), Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots.stroke), Int64, Int})
|
||||||
|
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}}}})
|
||||||
|
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})
|
||||||
|
precompile(Tuple{typeof(Plots._do_plot_show), Plots.Plot{Plots.GRBackend}, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.compute_xyz), Array{Float64, 1}, Array{Float64, 1}, Array{Float64, 1}})
|
||||||
|
isdefined(Plots, Symbol("#@layout")) && precompile(Tuple{getfield(Plots, Symbol("#@layout")), LineNumberNode, Module, Expr})
|
||||||
|
precompile(Tuple{typeof(Plots.build_layout), Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots._preprocess_barlike), Base.Dict{Symbol, Any}, Base.UnitRange{Int64}, Array{Float64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.compute_xyz), Nothing, Array{Float64, 1}, Nothing})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_contour_levels), Plots.Series, Tuple{Float64, Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots.aliasesAndAutopick), Base.Dict{Symbol, Any}, Symbol, Base.Dict{Symbol, Symbol}, Array{Symbol, 1}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots._apply_type_recipe), Base.Dict{Symbol, Any}, Array{String, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.process_fillrange), Nothing, Base.Dict{Symbol, Any}})
|
||||||
|
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.process_ribbon), typeof(identity), Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots._add_the_series), Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}, Base.Dict{Symbol, Any}})
|
||||||
|
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}})
|
||||||
|
precompile(Tuple{typeof(Plots.convertToAnyVector), Array{Array{Float64, 1}, 1}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots._prepare_subplot), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_text_size), String, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_set_gradient), Plots.Series})
|
||||||
|
precompile(Tuple{typeof(Plots.attr), Plots.EmptyLayout, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_update_colorbar!), Plots.GRColorbar, Plots.Series})
|
||||||
|
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}})
|
||||||
|
precompile(Tuple{typeof(Plots.ignorenan_extrema), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}})
|
||||||
|
precompile(Tuple{typeof(Plots.handleColors!), Base.Dict{Symbol, Any}, Plots.Shape, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Float64, 2}}, Array{RecipesBase.RecipeData, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.labelfunc), Symbol, Plots.GRBackend})
|
||||||
|
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.gr_polyline), Array{Float64, 1}, Array{Float64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.is_seriestype_supported), Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg), Tuple{Int64, Float64}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg), Base.UnitRange{Int64}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.trueOrAllTrue), typeof(identity), Array{Symbol, 2}})
|
||||||
|
precompile(Tuple{typeof(Plots.annotate!), Array{Tuple{Int64, Float64, Plots.PlotText}, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.is_seriestype_supported), Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.widen), Float64, Float64, Symbol})
|
||||||
|
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.gr_set_xticks_font), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
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._cycle), ColorTypes.RGBA{Float64}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_lims), Plots.Subplot{Plots.GRBackend}, Plots.Axis, Bool, Nothing})
|
||||||
|
precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Base.UnitRange{Int64}}, Array{RecipesBase.RecipeData, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.convertToAnyVector), Array{Float64, 2}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{}, Array{RecipesBase.RecipeData, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.is_marker_supported), Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Base.Complex{Float64}, 1}}, Array{RecipesBase.RecipeData, 1}})
|
||||||
|
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})
|
||||||
|
precompile(Tuple{typeof(Plots.processLineArg), Base.Dict{Symbol, Any}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.font), String, Int})
|
||||||
|
precompile(Tuple{typeof(Plots.vline!), Array{Int64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.text), String, Int64, Symbol, Symbol})
|
||||||
|
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.title!), String})
|
||||||
|
precompile(Tuple{typeof(Plots._filter_input_data!), Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots._cycle), Array{Float64, 1}, Array{Int64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.attr), Plots.EmptyLayout, Symbol, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots._display), Plots.Plot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.frame), Plots.Animation, Plots.Plot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Base.UnitRange{Int64}, Array{Float64, 1}, Tuple{Float64, Float64}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_update_colorbar!), Plots.GRColorbar, Plots.Series})
|
||||||
|
precompile(Tuple{typeof(Plots.titlefont), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{typeof(Base.log), Int64}, Array{RecipesBase.RecipeData, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_set_gradient), Plots.Series})
|
||||||
|
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._transform_ticks), Base.UnitRange{Int64}})
|
||||||
|
precompile(Tuple{typeof(Plots._prepare_annotations), Plots.Subplot{Plots.GRBackend}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.process_ribbon), Nothing, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg), Tuple{Int64, Int64}, Int64})
|
||||||
|
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{Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Array{Float64, 1}}, Array{RecipesBase.RecipeData, 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})
|
||||||
|
precompile(Tuple{typeof(Plots.tickfont), Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots.series_annotations_shapes!), Plots.Series, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_set_transparency), ColorTypes.RGBA{Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}, Array{Float64, 1}}, Array{RecipesBase.RecipeData, 1}})
|
||||||
|
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})
|
||||||
|
precompile(Tuple{typeof(Plots.convertToAnyVector), Array{Function, 1}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots.rightpad), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.compute_xyz), Array{Float64, 1}, Array{Float64, 1}, Nothing})
|
||||||
|
precompile(Tuple{typeof(Plots.iter_segments), Plots.Series})
|
||||||
|
precompile(Tuple{typeof(Plots.allAlphas), Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.gui), Plots.Plot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots._add_smooth_kw), Array{Base.Dict{Symbol, Any}, 1}, Base.Dict{Symbol, Any}})
|
||||||
|
precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Float64, 1}}, Array{RecipesBase.RecipeData, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots._update_subplot_colors), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.link_axes!), Plots.GridLayout, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.get_linecolor), Plots.Series, Tuple{Float64, Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots.ylims), Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.get_fillcolor), Plots.Series, Tuple{Float64, Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots.get_clims), Plots.Subplot{Plots.GRBackend}, Plots.Series})
|
||||||
|
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{Float64, 1}, Array{Float64, 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.slice_arg), ColorTypes.RGBA{Float64}, Int64})
|
||||||
|
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{Plots.PortfolioComposition}, Array{RecipesBase.RecipeData, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Array{Int64, 1}, Array{Int64, 1}, Tuple{Float64, Float64}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_set_transparency), ColorTypes.RGBA{Float64}, Nothing})
|
||||||
|
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._transform_ticks), Base.StepRange{Int64, Int64}})
|
||||||
|
precompile(Tuple{typeof(Plots.allStyles), Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.get_clims), Plots.Subplot{Plots.GRBackend}, Plots.Series})
|
||||||
|
precompile(Tuple{typeof(Plots.layout_args), Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.locate_annotation), Plots.Subplot{Plots.GRBackend}, Int64, Float64, Plots.PlotText})
|
||||||
|
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.contour), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Int})
|
||||||
|
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.png), Plots.Plot{Plots.GRBackend}, String})
|
||||||
|
precompile(Tuple{typeof(Plots.create_grid), Expr})
|
||||||
|
precompile(Tuple{typeof(Plots.guidefont), Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{}, Array{RecipesBase.RecipeData, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.bottompad), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.attr!), Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots._update_subplot_colors), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots._preprocess_args), Base.Dict{Symbol, Any}, Tuple{Array{Int64, 1}}, Array{RecipesBase.RecipeData, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.create_grid_vcat), Expr})
|
||||||
|
precompile(Tuple{typeof(Plots.toppad), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.discrete_value!), Plots.Axis, Array{String, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg), Int64, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.trueOrAllTrue), typeof(Plots.is3d), Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_draw_markers), Plots.Series, Float64, Float64, Tuple{Float64, Float64}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.discrete_value!), Plots.Axis, Array{Union{Base.Missing, Float64}, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.attr!), Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots.processMarkerArg), Base.Dict{Symbol, Any}, Float64})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg), Base.StepRange{Int64, Int64}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.rowsize), Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.ylims), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.optimal_ticks_and_labels), Plots.Subplot{Plots.GRBackend}, Plots.Axis, Nothing})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Plots.SeriesAnnotations})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Bool})
|
||||||
|
precompile(Tuple{typeof(Plots._transform_ticks), Nothing})
|
||||||
|
precompile(Tuple{typeof(Plots.make_steps), Nothing, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.splittable_kw), Symbol, Plots.GridLayout, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.supported_markers), Plots.GRBackend})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg), Nothing, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Array{Float64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_set_font), Plots.Font})
|
||||||
|
precompile(Tuple{typeof(Plots.splittable_kw), Symbol, ColorTypes.RGB{Float64}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.leftpad), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.convertLegendValue), Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.splittable_kw), Symbol, String, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Array{Any, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.supported_styles), Plots.GRBackend})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Tuple{Symbol, Symbol, Int64, Symbol, Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots.stroke), Int64, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Tuple{Symbol, Symbol, Symbol, Int64, Float64}})
|
||||||
|
precompile(Tuple{typeof(Plots.add_layout_pct!), Base.Dict{Symbol, Any}, Expr, Int64, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_subplot_extrema), Plots.Subplot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Float64})
|
||||||
|
precompile(Tuple{typeof(Plots.create_grid), Expr})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Tuple{Array{Symbol, 2}, Int64}})
|
||||||
|
precompile(Tuple{typeof(Plots._cycle), Float64, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.calc_num_subplots), Plots.EmptyLayout})
|
||||||
|
precompile(Tuple{typeof(Plots._replace_markershape), Plots.Shape})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Tuple{Int64, Float64, Symbol}})
|
||||||
|
precompile(Tuple{typeof(Plots._process_userrecipes), Plots.Plot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Tuple{Array{Float64, 2}}})
|
||||||
|
precompile(Tuple{typeof(Plots.nobigs), Array{Float64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.prepare_output), Plots.Plot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg), Symbol, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.get_linewidth), Plots.Series})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg), String, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_polyline), Array{Float64, 1}, Array{Float64, 1}, typeof(identity)})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Tuple{Int64, Symbol}})
|
||||||
|
precompile(Tuple{typeof(Plots._cycle), Int64, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.filter_data), Nothing, Array{Int64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.process_annotation), Plots.Subplot{Plots.GRBackend}, Int64, Float64, Plots.PlotText})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Tuple{Int64, Float64, Symbol, Plots.Stroke}})
|
||||||
|
precompile(Tuple{typeof(Plots.get_linestyle), Plots.Series})
|
||||||
|
precompile(Tuple{typeof(Plots._expand_subplot_extrema), Plots.Subplot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots._cycle), Symbol, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.get_fillalpha), Plots.Series})
|
||||||
|
precompile(Tuple{typeof(Plots.font), String, Int})
|
||||||
|
precompile(Tuple{typeof(Plots.get_series_color), Symbol, Plots.Subplot{Plots.GRBackend}, Int64, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Tuple{Array{Symbol, 2}, Int64, Float64, Plots.Stroke}})
|
||||||
|
precompile(Tuple{typeof(Plots.get_linealpha), Plots.Series})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg), Float64, 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.replaceAliases!), Base.Dict{Symbol, Any}, Base.Dict{Symbol, Symbol}})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Tuple{String, Tuple{Int64, Int64}, Base.StepRange{Int64, Int64}, Symbol}})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Tuple{Int64, Array{Symbol, 2}}})
|
||||||
|
precompile(Tuple{typeof(Plots.is_2tuple), Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots._cycle), Plots.Shape, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Tuple{Float64, Symbol}})
|
||||||
|
precompile(Tuple{typeof(Plots.update_child_bboxes!), Plots.Subplot{Plots.GRBackend}, Array{Measures.Length{:mm, Float64}, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Nothing})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Tuple{Array{Float64, 1}, Array{Float64, 1}}})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Tuple{Symbol, Float64, Plots.Stroke}})
|
||||||
|
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{Symbol, Int64}})
|
||||||
|
precompile(Tuple{typeof(Plots._cycle), Nothing, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.link_axes!), Array{RecipesBase.AbstractLayout, 1}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots._replace_markershape), Array{Symbol, 2}})
|
||||||
|
precompile(Tuple{typeof(Plots.allReals), Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.get_subplot), Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Tuple{}})
|
||||||
|
precompile(Tuple{typeof(Plots._transform_ticks), Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Tuple{String, Symbol}})
|
||||||
|
precompile(Tuple{typeof(Plots._update_axis), Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Symbol, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.slice_arg), Bool, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.prepare_output), Plots.Plot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.splittable_kw), Symbol, Plots.Plot{Plots.GRBackend}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots._create_backend_figure), Plots.Plot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.text), String, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.bar), Array{Float64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.annotations), Array{Any, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots._do_plot_show), Plots.Plot{Plots.GRBackend}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.splittable_kw), Symbol, Int64, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.link_axes!), Plots.Subplot{Plots.GRBackend}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.get_axis), Plots.Subplot{Plots.GRBackend}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.expand_extrema!), Plots.Axis, Array{Int64, 1}})
|
||||||
|
precompile(Tuple{typeof(Plots.series_annotations), Plots.SeriesAnnotations})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Tuple{Float64, Array{Symbol, 2}, Int64}})
|
||||||
|
precompile(Tuple{typeof(Plots.wraptuple), Tuple{Plots.Shape, Int64, ColorTypes.RGBA{Float64}}})
|
||||||
|
precompile(Tuple{typeof(Plots._update_axis), Plots.Plot{Plots.GRBackend}, Plots.Subplot{Plots.GRBackend}, Base.Dict{Symbol, Any}, Symbol, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.splittable_kw), Symbol, Float64, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.splittable_kw), Symbol, Symbol, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.heatmap_edges), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Symbol, Bool})
|
||||||
|
precompile(Tuple{typeof(Plots.gr_set_line), Int64, Symbol, PlotUtils.ColorGradient})
|
||||||
|
precompile(Tuple{typeof(Plots.link_axes!), Array{RecipesBase.AbstractLayout, 1}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.build_layout), Base.Dict{Symbol, Any}})
|
||||||
|
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})
|
||||||
|
precompile(Tuple{typeof(Plots.get_axis), Plots.Subplot{Plots.GRBackend}, 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("#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}})
|
||||||
|
precompile(Tuple{typeof(Plots.series_annotations), Nothing})
|
||||||
|
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}})
|
||||||
|
precompile(Tuple{typeof(Plots.ohlc), Array{Plots.OHLC{T} where T<:Real, 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("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:grid, :lims, :flip), Tuple{Bool, Tuple{Int64, Int64}, Bool}}, typeof(Plots.attr!), Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots.update_child_bboxes!), Plots.GridLayout})
|
||||||
|
isdefined(Plots, Symbol("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:ticks,), Tuple{Base.UnitRange{Int64}}}, typeof(Plots.attr!), Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots.update_child_bboxes!), Plots.GridLayout})
|
||||||
|
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, :flip, :ticks, :guide), Tuple{Tuple{Int64, Int64}, Bool, Base.StepRange{Int64, Int64}, String}}, typeof(Plots.attr!), Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots.processFillArg), Base.Dict{Symbol, Any}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.processFillArg), Base.Dict{Symbol, Any}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.handleColors!), Base.Dict{Symbol, Any}, Array{Symbol, 2}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots._process_userrecipe), Plots.Plot{Plots.GRBackend}, Array{Base.Dict{Symbol, Any}, 1}, RecipesBase.RecipeData})
|
||||||
|
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{(:lims,), Tuple{Tuple{Int64, Int64}}}, typeof(Plots.attr!), Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots.handleColors!), Base.Dict{Symbol, Any}, Array{Symbol, 2}, Symbol})
|
||||||
|
isdefined(Plots, Symbol("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:lims,), Tuple{Tuple{Int64, Int64}}}, typeof(Plots.attr!), Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots.prepareSeriesData), Array{Union{Base.Missing, Number}, 1}})
|
||||||
|
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{(:grid,), Tuple{Bool}}, typeof(Plots.attr!), Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots._process_userrecipe), Plots.Plot{Plots.GRBackend}, Array{Base.Dict{Symbol, Any}, 1}, RecipesBase.RecipeData})
|
||||||
|
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}})
|
||||||
|
precompile(Tuple{typeof(Plots.axis_limits), Plots.Subplot{Plots.GRBackend}, 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}}, Symbol})
|
||||||
|
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("#test_examples##kw")) && precompile(Tuple{getfield(Plots, Symbol("#test_examples##kw")), NamedTuple{(:disp,), Tuple{Bool}}, typeof(Plots.test_examples), Symbol})
|
||||||
|
isdefined(Plots, Symbol("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:flip,), Tuple{Bool}}, typeof(Plots.attr!), Plots.Axis})
|
||||||
|
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})
|
||||||
|
precompile(Tuple{typeof(Plots.axis_limits), Plots.Subplot{Plots.GRBackend}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.ignorenan_extrema), Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots.heatmap_edges), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.layout_args), Plots.GridLayout})
|
||||||
|
isdefined(Plots, Symbol("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:ticks,), Tuple{Nothing}}, typeof(Plots.attr!), Plots.Axis})
|
||||||
|
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("#attr!##kw")) && precompile(Tuple{getfield(Plots, Symbol("#attr!##kw")), NamedTuple{(:formatter,), Tuple{Symbol}}, typeof(Plots.attr!), Plots.Axis})
|
||||||
|
precompile(Tuple{typeof(Plots.get_linecolor), Plots.Series, Tuple{Float64, Float64}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.heatmap_edges), Array{Float64, 1}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.backend)})
|
||||||
|
precompile(Tuple{typeof(Plots.get_linecolor), Plots.Series, Tuple{Float64, Float64}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.hascolorbar), Plots.Subplot{Plots.GRBackend}})
|
||||||
|
precompile(Tuple{typeof(Plots.get_fillcolor), Plots.Series, Tuple{Float64, Float64}, Int64})
|
||||||
|
precompile(Tuple{typeof(Plots.heatmap_edges), Base.StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}, Symbol})
|
||||||
|
precompile(Tuple{typeof(Plots.allStyles), Symbol})
|
||||||
end
|
end
|
||||||
|
|||||||
+8
-6
@@ -746,12 +746,14 @@ end
|
|||||||
edge_x, edge_y, weights = x, y, z.surf
|
edge_x, edge_y, weights = x, y, z.surf
|
||||||
|
|
||||||
float_weights = float(weights)
|
float_weights = float(weights)
|
||||||
if float_weights === weights
|
if !plotattributes[:show_empty_bins]
|
||||||
float_weights = deepcopy(float_weights)
|
if float_weights === weights
|
||||||
end
|
float_weights = deepcopy(float_weights)
|
||||||
for (i, c) in enumerate(float_weights)
|
end
|
||||||
if c == 0
|
for (i, c) in enumerate(float_weights)
|
||||||
float_weights[i] = NaN
|
if c == 0
|
||||||
|
float_weights[i] = NaN
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
+62
-37
@@ -7,46 +7,62 @@
|
|||||||
# note: returns meta information... mainly for use with automatic labeling from DataFrames for now
|
# note: returns meta information... mainly for use with automatic labeling from DataFrames for now
|
||||||
|
|
||||||
const FuncOrFuncs{F} = Union{F, Vector{F}, Matrix{F}}
|
const FuncOrFuncs{F} = Union{F, Vector{F}, Matrix{F}}
|
||||||
const DataPoint = Union{Number, AbstractString, Missing}
|
const MaybeNumber = Union{Number, Missing}
|
||||||
const SeriesData = Union{AVec{<:DataPoint}, Function, Surface, Volume}
|
const MaybeString = Union{AbstractString, Missing}
|
||||||
|
const DataPoint = Union{MaybeNumber, MaybeString}
|
||||||
|
|
||||||
prepareSeriesData(x) = error("Cannot convert $(typeof(x)) to series data for plotting")
|
prepareSeriesData(x) = error("Cannot convert $(typeof(x)) to series data for plotting")
|
||||||
prepareSeriesData(::Nothing) = nothing
|
prepareSeriesData(::Nothing) = nothing
|
||||||
prepareSeriesData(s::SeriesData) = handlemissings(s)
|
prepareSeriesData(f::Function) = f
|
||||||
|
prepareSeriesData(a::AbstractArray{<:MaybeNumber}) = replace!(
|
||||||
handlemissings(v) = v
|
x -> ismissing(x) || isinf(x) ? NaN : x,
|
||||||
handlemissings(v::AbstractArray{Union{T,Missing}}) where T <: Number = replace(v, missing => NaN)
|
map(float,a))
|
||||||
handlemissings(v::AbstractArray{Union{T,Missing}}) where T <: AbstractString = replace(v, missing => "")
|
prepareSeriesData(a::AbstractArray{<:MaybeString}) = replace(x -> ismissing(x) ? "" : x, a)
|
||||||
handlemissings(s::Surface) = Surface(handlemissings(s.surf))
|
prepareSeriesData(s::Surface{<:AMat{<:MaybeNumber}}) = Surface(prepareSeriesData(s.surf))
|
||||||
handlemissings(v::Volume) = Volume(handlemissings(v.v), v.x_extents, v.y_extents, v.z_extents)
|
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
|
# default: assume x represents a single series
|
||||||
convertToAnyVector(x) = Any[prepareSeriesData(x)]
|
convertToAnyVector(x, plotattributes) = Any[prepareSeriesData(x)]
|
||||||
|
|
||||||
# fixed number of blank series
|
# fixed number of blank series
|
||||||
convertToAnyVector(n::Integer) = Any[zeros(0) for i in 1:n]
|
convertToAnyVector(n::Integer, plotattributes) = Any[zeros(0) for i in 1:n]
|
||||||
|
|
||||||
# vector of data points is a single series
|
# vector of data points is a single series
|
||||||
convertToAnyVector(v::AVec{<:DataPoint}) = Any[prepareSeriesData(v)]
|
convertToAnyVector(v::AVec{<:DataPoint}, plotattributes) = Any[prepareSeriesData(v)]
|
||||||
|
|
||||||
# list of things (maybe other vectors, functions, or something else)
|
# list of things (maybe other vectors, functions, or something else)
|
||||||
convertToAnyVector(v::AVec) = vcat((convertToAnyVector(vi) for vi in v)...)
|
function convertToAnyVector(v::AVec, plotattributes)
|
||||||
|
if all(x -> x isa MaybeNumber, v)
|
||||||
|
convertToAnyVector(Vector{MaybeNumber}(v), plotattributes)
|
||||||
|
elseif all(x -> x isa MaybeString, v)
|
||||||
|
convertToAnyVector(Vector{MaybeString}(v), plotattributes)
|
||||||
|
else
|
||||||
|
vcat((convertToAnyVector(vi, plotattributes) for vi in v)...)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Matrix is split into columns
|
# Matrix is split into columns
|
||||||
convertToAnyVector(v::AMat{<:DataPoint}) = Any[prepareSeriesData(v[:,i]) for i in 1:size(v,2)]
|
function convertToAnyVector(v::AMat{<:DataPoint}, plotattributes)
|
||||||
|
if all3D(plotattributes)
|
||||||
|
Any[prepareSeriesData(Surface(v))]
|
||||||
|
else
|
||||||
|
Any[prepareSeriesData(v[:, i]) for i in 1:size(v, 2)]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# --------------------------------------------------------------------
|
# --------------------------------------------------------------------
|
||||||
# Fillranges & ribbons
|
# Fillranges & ribbons
|
||||||
|
|
||||||
|
|
||||||
process_fillrange(range::Number) = [range]
|
process_fillrange(range::Number, plotattributes) = [range]
|
||||||
process_fillrange(range) = convertToAnyVector(range)
|
process_fillrange(range, plotattributes) = convertToAnyVector(range, plotattributes)
|
||||||
|
|
||||||
process_ribbon(ribbon::Number) = [ribbon]
|
process_ribbon(ribbon::Number, plotattributes) = [ribbon]
|
||||||
process_ribbon(ribbon) = convertToAnyVector(ribbon)
|
process_ribbon(ribbon, plotattributes) = convertToAnyVector(ribbon, plotattributes)
|
||||||
# ribbon as a tuple: (lower_ribbons, upper_ribbons)
|
# ribbon as a tuple: (lower_ribbons, upper_ribbons)
|
||||||
process_ribbon(ribbon::Tuple{Any,Any}) = collect(zip(convertToAnyVector(ribbon[1]),
|
process_ribbon(ribbon::Tuple{Any,Any}, plotattributes) = collect(zip(convertToAnyVector(ribbon[1], plotattributes),
|
||||||
convertToAnyVector(ribbon[2])))
|
convertToAnyVector(ribbon[2], plotattributes)))
|
||||||
|
|
||||||
|
|
||||||
# --------------------------------------------------------------------
|
# --------------------------------------------------------------------
|
||||||
@@ -110,17 +126,17 @@ struct SliceIt end
|
|||||||
z = z.data
|
z = z.data
|
||||||
end
|
end
|
||||||
|
|
||||||
xs = convertToAnyVector(x)
|
xs = convertToAnyVector(x, plotattributes)
|
||||||
ys = convertToAnyVector(y)
|
ys = convertToAnyVector(y, plotattributes)
|
||||||
zs = convertToAnyVector(z)
|
zs = convertToAnyVector(z, plotattributes)
|
||||||
|
|
||||||
|
|
||||||
fr = pop!(plotattributes, :fillrange, nothing)
|
fr = pop!(plotattributes, :fillrange, nothing)
|
||||||
fillranges = process_fillrange(fr)
|
fillranges = process_fillrange(fr, plotattributes)
|
||||||
mf = length(fillranges)
|
mf = length(fillranges)
|
||||||
|
|
||||||
rib = pop!(plotattributes, :ribbon, nothing)
|
rib = pop!(plotattributes, :ribbon, nothing)
|
||||||
ribbons = process_ribbon(rib)
|
ribbons = process_ribbon(rib, plotattributes)
|
||||||
mr = length(ribbons)
|
mr = length(ribbons)
|
||||||
|
|
||||||
# @show zs
|
# @show zs
|
||||||
@@ -143,7 +159,7 @@ struct SliceIt end
|
|||||||
rib = ribbons[mod1(i,mr)]
|
rib = ribbons[mod1(i,mr)]
|
||||||
di[:ribbon] = isa(rib, Function) ? map(rib, di[:x]) : rib
|
di[:ribbon] = isa(rib, Function) ? map(rib, di[:x]) : rib
|
||||||
|
|
||||||
push!(series_list, RecipeData(di, Any[]))
|
push!(series_list, RecipeData(di, ()))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
nothing # don't add a series for the main block
|
nothing # don't add a series for the main block
|
||||||
@@ -363,12 +379,16 @@ end
|
|||||||
|
|
||||||
@recipe function f(f::FuncOrFuncs{F}) where F<:Function
|
@recipe function f(f::FuncOrFuncs{F}) where F<:Function
|
||||||
plt = plotattributes[:plot_object]
|
plt = plotattributes[:plot_object]
|
||||||
xmin, xmax = try
|
xmin, xmax = if haskey(plotattributes, :xlims)
|
||||||
axis_limits(plt[1], :x)
|
plotattributes[:xlims]
|
||||||
catch
|
else
|
||||||
xinv = invscalefunc(get(plotattributes, :xscale, :identity))
|
try
|
||||||
xm = tryrange(f, xinv.([-5,-1,0,0.01]))
|
axis_limits(plt[1], :x)
|
||||||
xm, tryrange(f, filter(x->x>xm, xinv.([5,1,0.99, 0, -0.01])))
|
catch
|
||||||
|
xinv = invscalefunc(get(plotattributes, :xscale, :identity))
|
||||||
|
xm = tryrange(f, xinv.([-5,-1,0,0.01]))
|
||||||
|
xm, tryrange(f, filter(x->x>xm, xinv.([5,1,0.99, 0, -0.01])))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
f, xmin, xmax
|
f, xmin, xmax
|
||||||
@@ -499,20 +519,25 @@ end
|
|||||||
# # special handling... xmin/xmax with parametric function(s)
|
# # special handling... xmin/xmax with parametric function(s)
|
||||||
@recipe function f(f::Function, xmin::Number, xmax::Number)
|
@recipe function f(f::Function, xmin::Number, xmax::Number)
|
||||||
xscale, yscale = [get(plotattributes, sym, :identity) for sym=(:xscale,:yscale)]
|
xscale, yscale = [get(plotattributes, sym, :identity) for sym=(:xscale,:yscale)]
|
||||||
xs = _scaled_adapted_grid(f, xscale, yscale, xmin, xmax)
|
_scaled_adapted_grid(f, xscale, yscale, xmin, xmax)
|
||||||
xs, f
|
|
||||||
end
|
end
|
||||||
@recipe function f(fs::AbstractArray{F}, xmin::Number, xmax::Number) where F<:Function
|
@recipe function f(fs::AbstractArray{F}, xmin::Number, xmax::Number) where F<:Function
|
||||||
xscale, yscale = [get(plotattributes, sym, :identity) for sym=(:xscale,:yscale)]
|
xscale, yscale = [get(plotattributes, sym, :identity) for sym=(:xscale,:yscale)]
|
||||||
xs = Any[_scaled_adapted_grid(f, xscale, yscale, xmin, xmax) for f in fs]
|
xs = Array{Any}(undef, length(fs))
|
||||||
xs, 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
|
||||||
end
|
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}, 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)
|
@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)
|
||||||
|
|
||||||
function _scaled_adapted_grid(f, xscale, yscale, xmin, xmax)
|
function _scaled_adapted_grid(f, xscale, yscale, xmin, xmax)
|
||||||
(xf, xinv), (yf, yinv) = ((scalefunc(s),invscalefunc(s)) for s in (xscale,yscale))
|
(xf, xinv), (yf, yinv) = ((scalefunc(s),invscalefunc(s)) for s in (xscale,yscale))
|
||||||
xinv.(adapted_grid(yf∘f∘xinv, xf.((xmin, xmax))))
|
xs, ys = adapted_grid(yf∘f∘xinv, xf.((xmin, xmax)))
|
||||||
|
xinv.(xs), yinv.(ys)
|
||||||
end
|
end
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|||||||
+16
-12
@@ -31,11 +31,11 @@ attr!(series::Series, v, k::Symbol) = (series.plotattributes[k] = v)
|
|||||||
|
|
||||||
# a single subplot
|
# a single subplot
|
||||||
mutable struct Subplot{T<:AbstractBackend} <: AbstractLayout
|
mutable struct Subplot{T<:AbstractBackend} <: AbstractLayout
|
||||||
parent
|
parent::AbstractLayout
|
||||||
series_list::Vector{Series} # arguments for each series
|
series_list::Vector{Series} # arguments for each series
|
||||||
minpad::Tuple{AbsoluteLength,AbsoluteLength,AbsoluteLength,AbsoluteLength} # leftpad, toppad, rightpad, bottompad
|
minpad::Tuple # leftpad, toppad, rightpad, bottompad
|
||||||
bbox#::BoundingBox # the canvas area which is available to this subplot
|
bbox::BoundingBox # the canvas area which is available to this subplot
|
||||||
plotarea#::BoundingBox # the part where the data goes
|
plotarea::BoundingBox # the part where the data goes
|
||||||
attr::KW # args specific to this subplot
|
attr::KW # args specific to this subplot
|
||||||
o # can store backend-specific data... like a pyplot ax
|
o # can store backend-specific data... like a pyplot ax
|
||||||
plt # the enclosing Plot object (can't give it a type because of no forward declarations)
|
plt # the enclosing Plot object (can't give it a type because of no forward declarations)
|
||||||
@@ -59,6 +59,10 @@ Extrema() = Extrema(Inf, -Inf)
|
|||||||
|
|
||||||
# -----------------------------------------------------------
|
# -----------------------------------------------------------
|
||||||
|
|
||||||
|
const SubplotMap = Dict{Any, Subplot}
|
||||||
|
|
||||||
|
# -----------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
mutable struct Plot{T<:AbstractBackend} <: AbstractPlot{T}
|
mutable struct Plot{T<:AbstractBackend} <: AbstractPlot{T}
|
||||||
backend::T # the backend type
|
backend::T # the backend type
|
||||||
@@ -67,17 +71,17 @@ mutable struct Plot{T<:AbstractBackend} <: AbstractPlot{T}
|
|||||||
user_attr::KW # raw arg inputs (after aliases). these are used as the input dict in `_plot!`
|
user_attr::KW # raw arg inputs (after aliases). these are used as the input dict in `_plot!`
|
||||||
series_list::Vector{Series} # arguments for each series
|
series_list::Vector{Series} # arguments for each series
|
||||||
o # the backend's plot object
|
o # the backend's plot object
|
||||||
subplots::Vector{Subplot{T}}
|
subplots::Vector{Subplot}
|
||||||
spmap::KW # provide any label as a map to a subplot
|
spmap::SubplotMap # provide any label as a map to a subplot
|
||||||
layout
|
layout::AbstractLayout
|
||||||
inset_subplots::Vector{Subplot{T}} # list of inset subplots
|
inset_subplots::Vector{Subplot} # list of inset subplots
|
||||||
init::Bool
|
init::Bool
|
||||||
end
|
end
|
||||||
|
|
||||||
function Plot(_backend = CURRENT_BACKEND)
|
function Plot()
|
||||||
Plot(_backend.pkg, 0, KW(), KW(), Series[], nothing,
|
Plot(backend(), 0, KW(), KW(), Series[], nothing,
|
||||||
Subplot{typeof(_backend.pkg)}[], KW(), EmptyLayout(),
|
Subplot[], SubplotMap(), EmptyLayout(),
|
||||||
Subplot{typeof(_backend.pkg)}[], false)
|
Subplot[], false)
|
||||||
end
|
end
|
||||||
|
|
||||||
# -----------------------------------------------------------------------
|
# -----------------------------------------------------------------------
|
||||||
|
|||||||
+72
-24
@@ -115,7 +115,6 @@ function regressionXY(x, y)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function replace_image_with_heatmap(z::Array{T}) where T<:Colorant
|
function replace_image_with_heatmap(z::Array{T}) where T<:Colorant
|
||||||
@show T, size(z)
|
|
||||||
n, m = size(z)
|
n, m = size(z)
|
||||||
# idx = 0
|
# idx = 0
|
||||||
colors = ColorGradient(vec(z))
|
colors = ColorGradient(vec(z))
|
||||||
@@ -343,8 +342,11 @@ const _scale_base = Dict{Symbol, Real}(
|
|||||||
:ln => ℯ,
|
:ln => ℯ,
|
||||||
)
|
)
|
||||||
|
|
||||||
function _heatmap_edges(v::AVec)
|
function _heatmap_edges(v::AVec, isedges::Bool = false)
|
||||||
length(v) == 1 && return v[1] .+ [-0.5, 0.5]
|
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)
|
vmin, vmax = ignorenan_extrema(v)
|
||||||
extra_min = (v[2] - v[1]) / 2
|
extra_min = (v[2] - v[1]) / 2
|
||||||
extra_max = (v[end] - v[end - 1]) / 2
|
extra_max = (v[end] - v[end - 1]) / 2
|
||||||
@@ -352,9 +354,25 @@ function _heatmap_edges(v::AVec)
|
|||||||
end
|
end
|
||||||
|
|
||||||
"create an (n+1) list of the outsides of heatmap rectangles"
|
"create an (n+1) list of the outsides of heatmap rectangles"
|
||||||
function heatmap_edges(v::AVec, scale::Symbol = :identity)
|
function heatmap_edges(v::AVec, scale::Symbol = :identity, isedges::Bool = false)
|
||||||
f, invf = scalefunc(scale), invscalefunc(scale)
|
f, invf = scalefunc(scale), invscalefunc(scale)
|
||||||
map(invf, _heatmap_edges(map(f,v)))
|
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})
|
||||||
|
nx, ny = length(x), length(y)
|
||||||
|
# ismidpoints = z_size == (ny, nx) # This fails some tests, but would actually be
|
||||||
|
# the correct check, since (4, 3) != (3, 4) and a missleading plot is produced.
|
||||||
|
ismidpoints = prod(z_size) == (ny * nx)
|
||||||
|
isedges = z_size == (ny - 1, nx - 1)
|
||||||
|
if !ismidpoints && !isedges
|
||||||
|
error("""Length of x & y does not match the size of z.
|
||||||
|
Must be either `size(z) == (length(y), length(x))` (x & y define midpoints)
|
||||||
|
or `size(z) == (length(y)+1, length(x)+1))` (x & y define edges).""")
|
||||||
|
end
|
||||||
|
x, y = heatmap_edges(x, xscale, isedges),
|
||||||
|
heatmap_edges(y, yscale, isedges)
|
||||||
|
return x, y
|
||||||
end
|
end
|
||||||
|
|
||||||
function convert_to_polar(theta, r, r_extrema = ignorenan_extrema(r))
|
function convert_to_polar(theta, r, r_extrema = ignorenan_extrema(r))
|
||||||
@@ -524,14 +542,9 @@ zlims(sp_idx::Int = 1) = zlims(current(), sp_idx)
|
|||||||
|
|
||||||
function get_clims(sp::Subplot)
|
function get_clims(sp::Subplot)
|
||||||
zmin, zmax = Inf, -Inf
|
zmin, zmax = Inf, -Inf
|
||||||
z_colored_series = (:contour, :contour3d, :heatmap, :histogram2d, :surface)
|
|
||||||
for series in series_list(sp)
|
for series in series_list(sp)
|
||||||
for vals in (series[:seriestype] in z_colored_series ? series[:z] : nothing, series[:line_z], series[:marker_z], series[:fill_z])
|
if series[:colorbar_entry]
|
||||||
if (typeof(vals) <: AbstractSurface) && (eltype(vals.surf) <: Union{Missing, Real})
|
zmin, zmax = _update_clims(zmin, zmax, get_clims(series)...)
|
||||||
zmin, zmax = _update_clims(zmin, zmax, ignorenan_extrema(vals.surf)...)
|
|
||||||
elseif (vals !== nothing) && (eltype(vals) <: Union{Missing, Real})
|
|
||||||
zmin, zmax = _update_clims(zmin, zmax, ignorenan_extrema(vals)...)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
clims = sp[:clims]
|
clims = sp[:clims]
|
||||||
@@ -542,6 +555,33 @@ function get_clims(sp::Subplot)
|
|||||||
return zmin < zmax ? (zmin, zmax) : (-0.1, 0.1)
|
return zmin < zmax ? (zmin, zmax) : (-0.1, 0.1)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function get_clims(sp::Subplot, series::Series)
|
||||||
|
zmin, zmax = if series[:colorbar_entry]
|
||||||
|
get_clims(sp)
|
||||||
|
else
|
||||||
|
get_clims(series)
|
||||||
|
end
|
||||||
|
clims = sp[:clims]
|
||||||
|
if is_2tuple(clims)
|
||||||
|
isfinite(clims[1]) && (zmin = clims[1])
|
||||||
|
isfinite(clims[2]) && (zmax = clims[2])
|
||||||
|
end
|
||||||
|
return zmin < zmax ? (zmin, zmax) : (-0.1, 0.1)
|
||||||
|
end
|
||||||
|
|
||||||
|
function get_clims(series::Series)
|
||||||
|
zmin, zmax = Inf, -Inf
|
||||||
|
z_colored_series = (:contour, :contour3d, :heatmap, :histogram2d, :surface)
|
||||||
|
for vals in (series[:seriestype] in z_colored_series ? series[:z] : nothing, series[:line_z], series[:marker_z], series[:fill_z])
|
||||||
|
if (typeof(vals) <: AbstractSurface) && (eltype(vals.surf) <: Union{Missing, Real})
|
||||||
|
zmin, zmax = _update_clims(zmin, zmax, ignorenan_extrema(vals.surf)...)
|
||||||
|
elseif (vals !== nothing) && (eltype(vals) <: Union{Missing, Real})
|
||||||
|
zmin, zmax = _update_clims(zmin, zmax, ignorenan_extrema(vals)...)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return zmin < zmax ? (zmin, zmax) : (-0.1, 0.1)
|
||||||
|
end
|
||||||
|
|
||||||
_update_clims(zmin, zmax, emin, emax) = min(zmin, emin), max(zmax, emax)
|
_update_clims(zmin, zmax, emin, emax) = min(zmin, emin), max(zmax, emax)
|
||||||
|
|
||||||
@enum ColorbarStyle cbar_gradient cbar_fill cbar_lines
|
@enum ColorbarStyle cbar_gradient cbar_fill cbar_lines
|
||||||
@@ -654,7 +694,7 @@ function has_attribute_segments(series::Series)
|
|||||||
end
|
end
|
||||||
series[:seriestype] == :shape && return false
|
series[:seriestype] == :shape && return false
|
||||||
# ... else we check relevant attributes if they have multiple inputs
|
# ... else we check relevant attributes if they have multiple inputs
|
||||||
return any((typeof(series[attr]) <: AbstractVector && length(series[attr]) > 1) for attr in [:seriescolor, :seriesalpha, :linecolor, :linealpha, :linewidth, :fillcolor, :fillalpha, :markercolor, :markeralpha, :markerstrokecolor, :markerstrokealpha]) || any(typeof(series[attr]) <: AbstractArray for attr in (:line_z, :fill_z, :marker_z))
|
return any((typeof(series[attr]) <: AbstractVector && length(series[attr]) > 1) for attr in [:seriescolor, :seriesalpha, :linecolor, :linealpha, :linewidth, :linestyle, :fillcolor, :fillalpha, :markercolor, :markeralpha, :markerstrokecolor, :markerstrokealpha]) || any(typeof(series[attr]) <: AbstractArray for attr in (:line_z, :fill_z, :marker_z))
|
||||||
end
|
end
|
||||||
|
|
||||||
# ---------------------------------------------------------------
|
# ---------------------------------------------------------------
|
||||||
@@ -1060,6 +1100,15 @@ legendfont(sp::Subplot) = font(
|
|||||||
sp[:legendfontcolor],
|
sp[:legendfontcolor],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
legendtitlefont(sp::Subplot) = font(
|
||||||
|
sp[:legendtitlefontfamily],
|
||||||
|
sp[:legendtitlefontsize],
|
||||||
|
sp[:legendtitlefontvalign],
|
||||||
|
sp[:legendtitlefonthalign],
|
||||||
|
sp[:legendtitlefontrotation],
|
||||||
|
sp[:legendtitlefontcolor],
|
||||||
|
)
|
||||||
|
|
||||||
tickfont(ax::Axis) = font(
|
tickfont(ax::Axis) = font(
|
||||||
ax[:tickfontfamily],
|
ax[:tickfontfamily],
|
||||||
ax[:tickfontsize],
|
ax[:tickfontsize],
|
||||||
@@ -1106,20 +1155,20 @@ function convert_sci_unicode(label::AbstractString)
|
|||||||
label
|
label
|
||||||
end
|
end
|
||||||
|
|
||||||
function straightline_data(series)
|
function straightline_data(series, expansion_factor = 1)
|
||||||
sp = series[:subplot]
|
sp = series[:subplot]
|
||||||
xl, yl = isvertical(series) ? (xlims(sp), ylims(sp)) : (ylims(sp), xlims(sp))
|
xl, yl = isvertical(series) ? (xlims(sp), ylims(sp)) : (ylims(sp), xlims(sp))
|
||||||
x, y = series[:x], series[:y]
|
x, y = series[:x], series[:y]
|
||||||
n = length(x)
|
n = length(x)
|
||||||
if n == 2
|
if n == 2
|
||||||
return straightline_data(xl, yl, x, y)
|
return straightline_data(xl, yl, x, y, expansion_factor)
|
||||||
else
|
else
|
||||||
k, r = divrem(n, 3)
|
k, r = divrem(n, 3)
|
||||||
if r == 0
|
if r == 0
|
||||||
xdata, ydata = fill(NaN, n), fill(NaN, n)
|
xdata, ydata = fill(NaN, n), fill(NaN, n)
|
||||||
for i in 1:k
|
for i in 1:k
|
||||||
inds = (3 * i - 2):(3 * i - 1)
|
inds = (3 * i - 2):(3 * i - 1)
|
||||||
xdata[inds], ydata[inds] = straightline_data(xl, yl, x[inds], y[inds])
|
xdata[inds], ydata[inds] = straightline_data(xl, yl, x[inds], y[inds], expansion_factor)
|
||||||
end
|
end
|
||||||
return xdata, ydata
|
return xdata, ydata
|
||||||
else
|
else
|
||||||
@@ -1128,7 +1177,7 @@ function straightline_data(series)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function straightline_data(xl, yl, x, y)
|
function straightline_data(xl, yl, x, y, expansion_factor = 1)
|
||||||
x_vals, y_vals = if y[1] == y[2]
|
x_vals, y_vals = if y[1] == y[2]
|
||||||
if x[1] == x[2]
|
if x[1] == x[2]
|
||||||
error("Two identical points cannot be used to describe a straight line.")
|
error("Two identical points cannot be used to describe a straight line.")
|
||||||
@@ -1149,29 +1198,28 @@ function straightline_data(xl, yl, x, y)
|
|||||||
end
|
end
|
||||||
# expand the data outside the axis limits, by a certain factor too improve
|
# expand the data outside the axis limits, by a certain factor too improve
|
||||||
# plotly(js) and interactive behaviour
|
# plotly(js) and interactive behaviour
|
||||||
factor = 100
|
x_vals = x_vals .+ (x_vals[2] - x_vals[1]) .* expansion_factor .* [-1, 1]
|
||||||
x_vals = x_vals .+ (x_vals[2] - x_vals[1]) .* factor .* [-1, 1]
|
y_vals = y_vals .+ (y_vals[2] - y_vals[1]) .* expansion_factor .* [-1, 1]
|
||||||
y_vals = y_vals .+ (y_vals[2] - y_vals[1]) .* factor .* [-1, 1]
|
|
||||||
return x_vals, y_vals
|
return x_vals, y_vals
|
||||||
end
|
end
|
||||||
|
|
||||||
function shape_data(series)
|
function shape_data(series, expansion_factor = 1)
|
||||||
sp = series[:subplot]
|
sp = series[:subplot]
|
||||||
xl, yl = isvertical(series) ? (xlims(sp), ylims(sp)) : (ylims(sp), xlims(sp))
|
xl, yl = isvertical(series) ? (xlims(sp), ylims(sp)) : (ylims(sp), xlims(sp))
|
||||||
x, y = series[:x], series[:y]
|
x, y = series[:x], series[:y]
|
||||||
factor = 100
|
factor = 100
|
||||||
for i in eachindex(x)
|
for i in eachindex(x)
|
||||||
if x[i] == -Inf
|
if x[i] == -Inf
|
||||||
x[i] = xl[1] - factor * (xl[2] - xl[1])
|
x[i] = xl[1] - expansion_factor * (xl[2] - xl[1])
|
||||||
elseif x[i] == Inf
|
elseif x[i] == Inf
|
||||||
x[i] = xl[2] + factor * (xl[2] - xl[1])
|
x[i] = xl[2] + expansion_factor * (xl[2] - xl[1])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
for i in eachindex(y)
|
for i in eachindex(y)
|
||||||
if y[i] == -Inf
|
if y[i] == -Inf
|
||||||
y[i] = yl[1] - factor * (yl[2] - yl[1])
|
y[i] = yl[1] - expansion_factor * (yl[2] - yl[1])
|
||||||
elseif y[i] == Inf
|
elseif y[i] == Inf
|
||||||
y[i] = yl[2] + factor * (yl[2] - yl[1])
|
y[i] = yl[2] + expansion_factor * (yl[2] - yl[1])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return x, y
|
return x, y
|
||||||
|
|||||||
+3
-65
@@ -1,34 +1,6 @@
|
|||||||
import Plots._current_plots_version
|
import Plots._current_plots_version
|
||||||
|
|
||||||
# Taken from MakieGallery
|
function image_comparison_tests(pkg::Symbol, idx::Int; debug = false, popup = !is_ci(), sigma = [1,1], tol = 1e-2)
|
||||||
"""
|
|
||||||
Downloads the reference images from ReferenceImages for a specific version
|
|
||||||
"""
|
|
||||||
function download_reference(version = v"0.0.1")
|
|
||||||
download_dir = abspath(@__DIR__, "reference_images")
|
|
||||||
isdir(download_dir) || mkpath(download_dir)
|
|
||||||
tarfile = joinpath(download_dir, "reference_images.zip")
|
|
||||||
url = "https://github.com/JuliaPlots/PlotReferenceImages.jl/archive/v$(version).tar.gz"
|
|
||||||
refpath = joinpath(download_dir, "PlotReferenceImages.jl-$(version)")
|
|
||||||
if !isdir(refpath) # if not yet downloaded
|
|
||||||
@info "downloading reference images for version $version"
|
|
||||||
download(url, tarfile)
|
|
||||||
BinaryProvider.unpack(tarfile, download_dir)
|
|
||||||
# check again after download
|
|
||||||
if !isdir(refpath)
|
|
||||||
error("Something went wrong while downloading reference images. Plots can't be compared to references")
|
|
||||||
else
|
|
||||||
rm(tarfile, force = true)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
@info "using reference images for version $version (already downloaded)"
|
|
||||||
end
|
|
||||||
refpath
|
|
||||||
end
|
|
||||||
|
|
||||||
const ref_image_dir = download_reference()
|
|
||||||
|
|
||||||
function image_comparison_tests(pkg::Symbol, idx::Int; debug = false, popup = isinteractive(), sigma = [1,1], tol = 1e-2)
|
|
||||||
Plots._debugMode.on = debug
|
Plots._debugMode.on = debug
|
||||||
example = Plots._examples[idx]
|
example = Plots._examples[idx]
|
||||||
Plots.theme(:default)
|
Plots.theme(:default)
|
||||||
@@ -39,36 +11,9 @@ function image_comparison_tests(pkg::Symbol, idx::Int; debug = false, popup = is
|
|||||||
# ensure consistent results
|
# ensure consistent results
|
||||||
Random.seed!(1234)
|
Random.seed!(1234)
|
||||||
|
|
||||||
# reference image directory setup
|
|
||||||
refdir = joinpath(ref_image_dir, "Plots", string(pkg))
|
|
||||||
fn = "ref$idx.png"
|
fn = "ref$idx.png"
|
||||||
|
reffn = reference_file(pkg, idx, _current_plots_version)
|
||||||
# firgure out version info
|
newfn = joinpath(reference_path(pkg, _current_plots_version), fn)
|
||||||
vns = filter(x->x[1] != '.', readdir(refdir))
|
|
||||||
versions = sort(VersionNumber.(vns), rev = true)
|
|
||||||
versions = filter(v -> v <= _current_plots_version, versions)
|
|
||||||
# @show refdir fn versions
|
|
||||||
|
|
||||||
newdir = joinpath(refdir, string(_current_plots_version))
|
|
||||||
newfn = joinpath(newdir, fn)
|
|
||||||
|
|
||||||
# figure out which reference file we should compare to, by finding the highest versioned file
|
|
||||||
reffn = nothing
|
|
||||||
for v in versions
|
|
||||||
tmpfn = joinpath(refdir, string(v), fn)
|
|
||||||
if isfile(tmpfn)
|
|
||||||
reffn = tmpfn
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# now we have the fn (if any)... do the comparison
|
|
||||||
# @show reffn
|
|
||||||
if reffn === nothing
|
|
||||||
reffn = newfn
|
|
||||||
end
|
|
||||||
# @show reffn
|
|
||||||
# return
|
|
||||||
|
|
||||||
# test function
|
# test function
|
||||||
func = (fn, idx) -> begin
|
func = (fn, idx) -> begin
|
||||||
@@ -78,13 +23,6 @@ function image_comparison_tests(pkg::Symbol, idx::Int; debug = false, popup = is
|
|||||||
png(fn)
|
png(fn)
|
||||||
end
|
end
|
||||||
|
|
||||||
# try
|
|
||||||
# run(`mkdir -p $newdir`)
|
|
||||||
# catch err
|
|
||||||
# display(err)
|
|
||||||
# end
|
|
||||||
# # reffn = joinpath(refdir, "ref$idx.png")
|
|
||||||
|
|
||||||
# the test
|
# the test
|
||||||
vtest = VisualTest(func, reffn, idx)
|
vtest = VisualTest(func, reffn, idx)
|
||||||
test_images(vtest, popup=popup, sigma=sigma, tol=tol, newfn = newfn)
|
test_images(vtest, popup=popup, sigma=sigma, tol=tol, newfn = newfn)
|
||||||
|
|||||||
+54
-21
@@ -1,40 +1,72 @@
|
|||||||
|
import ImageMagick
|
||||||
using VisualRegressionTests
|
using VisualRegressionTests
|
||||||
using Plots
|
using Plots
|
||||||
using Random
|
using Random
|
||||||
using BinaryProvider
|
|
||||||
using Test
|
using Test
|
||||||
using FileIO
|
using FileIO
|
||||||
|
using Gtk
|
||||||
|
using LibGit2
|
||||||
using GeometryTypes
|
using GeometryTypes
|
||||||
|
|
||||||
|
reference_dir(args...) = joinpath(homedir(), ".julia", "dev", "PlotReferenceImages", args...)
|
||||||
|
|
||||||
|
function reference_file(backend, i, version)
|
||||||
|
refdir = reference_dir("Plots", string(backend))
|
||||||
|
fn = "ref$i.png"
|
||||||
|
versions = sort(VersionNumber.(readdir(refdir)), rev = true)
|
||||||
|
|
||||||
|
reffn = joinpath(refdir, string(version), fn)
|
||||||
|
for v in versions
|
||||||
|
tmpfn = joinpath(refdir, string(v), fn)
|
||||||
|
if isfile(tmpfn)
|
||||||
|
reffn = tmpfn
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return reffn
|
||||||
|
end
|
||||||
|
|
||||||
|
reference_path(backend, version) = reference_dir("Plots", string(backend), string(version))
|
||||||
|
|
||||||
|
if !isdir(reference_dir())
|
||||||
|
mkpath(reference_dir())
|
||||||
|
LibGit2.clone("https://github.com/JuliaPlots/PlotReferenceImages.jl.git", reference_dir())
|
||||||
|
end
|
||||||
|
|
||||||
include("imgcomp.jl")
|
include("imgcomp.jl")
|
||||||
# don't actually show the plots
|
# don't actually show the plots
|
||||||
Random.seed!(1234)
|
Random.seed!(1234)
|
||||||
default(show=false, reuse=true)
|
default(show=false, reuse=true)
|
||||||
img_tol = isinteractive() ? 1e-2 : 10e-2
|
is_ci() = get(ENV, "CI", "false") == "true"
|
||||||
|
img_tol = is_ci() ? 10e-2 : 10e-2
|
||||||
|
|
||||||
@testset "GR" begin
|
@testset "Backends" begin
|
||||||
ENV["PLOTS_TEST"] = "true"
|
|
||||||
ENV["GKSwstype"] = "100"
|
|
||||||
@test gr() == Plots.GRBackend()
|
|
||||||
@test backend() == Plots.GRBackend()
|
|
||||||
|
|
||||||
@static if Sys.islinux()
|
@testset "GR" begin
|
||||||
image_comparison_facts(:gr, tol=img_tol, skip = [25, 30])
|
ENV["PLOTS_TEST"] = "true"
|
||||||
|
ENV["GKSwstype"] = "100"
|
||||||
|
@test gr() == Plots.GRBackend()
|
||||||
|
@test backend() == Plots.GRBackend()
|
||||||
|
|
||||||
|
@static if Sys.islinux()
|
||||||
|
image_comparison_facts(:gr, tol=img_tol, skip = Plots._backend_skips[:gr])
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
|
@testset "UnicodePlots" begin
|
||||||
|
@test unicodeplots() == Plots.UnicodePlotsBackend()
|
||||||
|
@test backend() == Plots.UnicodePlotsBackend()
|
||||||
|
|
||||||
@testset "UnicodePlots" begin
|
# lets just make sure it runs without error
|
||||||
@test unicodeplots() == Plots.UnicodePlotsBackend()
|
p = plot(rand(10))
|
||||||
@test backend() == Plots.UnicodePlotsBackend()
|
@test isa(p, Plots.Plot) == true
|
||||||
|
@test isa(display(p), Nothing) == true
|
||||||
|
p = bar(randn(10))
|
||||||
|
@test isa(p, Plots.Plot) == true
|
||||||
|
@test isa(display(p), Nothing) == true
|
||||||
|
end
|
||||||
|
|
||||||
# lets just make sure it runs without error
|
|
||||||
p = plot(rand(10))
|
|
||||||
@test isa(p, Plots.Plot) == true
|
|
||||||
@test isa(display(p), Nothing) == true
|
|
||||||
p = bar(randn(10))
|
|
||||||
@test isa(p, Plots.Plot) == true
|
|
||||||
@test isa(display(p), Nothing) == true
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@testset "Axes" begin
|
@testset "Axes" begin
|
||||||
@@ -61,6 +93,7 @@ end
|
|||||||
for plt in plots
|
for plt in plots
|
||||||
display(plt)
|
display(plt)
|
||||||
end
|
end
|
||||||
|
@test_nowarn plot(x->x^2,0,2)
|
||||||
end
|
end
|
||||||
|
|
||||||
@testset "EmptyAnim" begin
|
@testset "EmptyAnim" begin
|
||||||
@@ -97,6 +130,6 @@ end
|
|||||||
[(missing,missing)], [(missing,missing,missing),("a","b","c")])
|
[(missing,missing)], [(missing,missing,missing),("a","b","c")])
|
||||||
for z in zipped
|
for z in zipped
|
||||||
@test isequal(collect(zip(Plots.unzip(z)...)), z)
|
@test isequal(collect(zip(Plots.unzip(z)...)), z)
|
||||||
@test isequal(collect(zip(Plots.unzip(Point.(z))...)), z)
|
@test isequal(collect(zip(Plots.unzip(GeometryTypes.Point.(z))...)), z)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user