Add annotation font defaults
This commit is contained in:
parent
57ba6aa5a9
commit
4731477920
@ -116,6 +116,12 @@ const _arg_desc = KW(
|
||||
: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.",
|
||||
:annotationfontfamily => "String or Symbol. Font family of annotations.",
|
||||
:annotationfontsize => "Integer. Font pointsize of annotations.",
|
||||
:annotationhalign => "Symbol. horizontal alignment of annotations, :hcenter, :left, :right or :center.",
|
||||
:annotationvalign => "Symbol. Vertical alignment of annotations, :vcenter, :top, :bottom or :center.",
|
||||
:annotationrotation => "Float. Rotation of annotations in degrees.",
|
||||
:annotationcolor => "Colorant or :match. Color of annotations.",
|
||||
:projection => "Symbol or String. '3d' or 'polar'",
|
||||
:aspect_ratio => "Symbol (:equal or :none) or Number. Plot area is resized so that 1 y-unit is the same size as `aspect_ratio` x-units. With `:none`, images inherit aspect ratio of the plot area.",
|
||||
:margin => "Measure (multiply by `mm`, `px`, etc). Base for individual margins... not directly used. Specifies the extra padding around subplots.",
|
||||
|
||||
@ -408,6 +408,12 @@ const _subplot_defaults = KW(
|
||||
:legendtitlefontrotation => 0.0,
|
||||
:legendtitlefontcolor => :match,
|
||||
:annotations => [], # annotation tuples... list of (x,y,annotation)
|
||||
:annotationfontfamily => :match,
|
||||
:annotationfontsize => 14,
|
||||
:annotationhalign => :hcenter,
|
||||
:annotationvalign => :vcenter,
|
||||
:annotationrotation => 0.0,
|
||||
:annotationcolor => :match,
|
||||
:projection => :none, # can also be :polar or :3d
|
||||
:aspect_ratio => :auto, # choose from :none or :equal
|
||||
:margin => 1mm,
|
||||
@ -519,6 +525,7 @@ const _initial_axis_defaults = deepcopy(_axis_defaults)
|
||||
const _initial_fontsizes = Dict(:titlefontsize => _subplot_defaults[:titlefontsize],
|
||||
:legendfontsize => _subplot_defaults[:legendfontsize],
|
||||
:legendtitlefontsize => _subplot_defaults[:legendtitlefontsize],
|
||||
:annotationfontsize => _subplot_defaults[:annotationfontsize],
|
||||
:tickfontsize => _axis_defaults[:tickfontsize],
|
||||
:guidefontsize => _axis_defaults[:guidefontsize])
|
||||
|
||||
@ -1359,6 +1366,8 @@ const _match_map = KW(
|
||||
:plot_titlefontcolor => :foreground_color,
|
||||
:tickfontcolor => :foreground_color_text,
|
||||
:guidefontcolor => :foreground_color_guide,
|
||||
:annotationfontfamily => :fontfamily_subplot,
|
||||
:annotationcolor => :foreground_color_subplot,
|
||||
)
|
||||
|
||||
# these can match values from the parent container (axis --> subplot --> plot)
|
||||
|
||||
@ -575,11 +575,21 @@ annotations(sa::SeriesAnnotations) = sa
|
||||
|
||||
# Expand arrays of coordinates, positions and labels into induvidual annotations
|
||||
# and make sure labels are of type PlotText
|
||||
function process_annotation(sp::Subplot, xs, ys, labs, font = font())
|
||||
function process_annotation(sp::Subplot, xs, ys, labs, font = nothing)
|
||||
anns = []
|
||||
labs = makevec(labs)
|
||||
xlength = length(methods(length, (typeof(xs),))) == 0 ? 1 : length(xs)
|
||||
ylength = length(methods(length, (typeof(ys),))) == 0 ? 1 : length(ys)
|
||||
if isnothing(font)
|
||||
font = Plots.font(;
|
||||
family=sp[:annotationfontfamily],
|
||||
pointsize=sp[:annotationfontsize],
|
||||
halign=sp[:annotationhalign],
|
||||
valign=sp[:annotationvalign],
|
||||
rotation=sp[:annotationrotation],
|
||||
color=sp[:annotationcolor],
|
||||
)
|
||||
end
|
||||
for i in 1:max(xlength, ylength, length(labs))
|
||||
x, y, lab = _cycle(xs, i), _cycle(ys, i), _cycle(labs, i)
|
||||
x = typeof(x) <: TimeType ? Dates.value(x) : x
|
||||
@ -588,14 +598,24 @@ function process_annotation(sp::Subplot, xs, ys, labs, font = font())
|
||||
alphabet = "abcdefghijklmnopqrstuvwxyz"
|
||||
push!(anns, (x, y, text(string("(", alphabet[sp[:subplot_index]], ")"), font)))
|
||||
else
|
||||
push!(anns, (x, y, isa(lab, PlotText) ? lab : isa(lab, Tuple) ? text(lab...) : text(lab, font)))
|
||||
push!(anns, (x, y, isa(lab, PlotText) ? lab : isa(lab, Tuple) ? text(lab[1], font, lab[2:end]...) : text(lab, font)))
|
||||
end
|
||||
end
|
||||
anns
|
||||
end
|
||||
function process_annotation(sp::Subplot, positions::Union{AVec{Symbol},Symbol}, labs, font = font())
|
||||
function process_annotation(sp::Subplot, positions::Union{AVec{Symbol},Symbol}, labs, font = nothing)
|
||||
anns = []
|
||||
positions, labs = makevec(positions), makevec(labs)
|
||||
if isnothing(font)
|
||||
font = Plots.font(;
|
||||
family=sp[:annotationfontfamily],
|
||||
pointsize=sp[:annotationfontsize],
|
||||
halign=sp[:annotationhalign],
|
||||
valign=sp[:annotationvalign],
|
||||
rotation=sp[:annotationrotation],
|
||||
color=sp[:annotationcolor],
|
||||
)
|
||||
end
|
||||
for i in 1:max(length(positions), length(labs))
|
||||
pos, lab = _cycle(positions, i), _cycle(labs, i)
|
||||
pos = get(_positionAliases, pos, pos)
|
||||
@ -603,7 +623,7 @@ function process_annotation(sp::Subplot, positions::Union{AVec{Symbol},Symbol},
|
||||
alphabet = "abcdefghijklmnopqrstuvwxyz"
|
||||
push!(anns, (pos, text(string("(", alphabet[sp[:subplot_index]], ")"), font)))
|
||||
else
|
||||
push!(anns, (pos, isa(lab, PlotText) ? lab : isa(lab, Tuple) ? text(lab...) : text(lab, font)))
|
||||
push!(anns, (pos, isa(lab, PlotText) ? lab : isa(lab, Tuple) ? text(lab[1], font, lab[2:end]...) : text(lab, font)))
|
||||
end
|
||||
end
|
||||
anns
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user