Merge 2bb00d6207ea14e2144eda74a50930c80809b461 into b76dc2d7a36ca5bbde126fbc46e86f28f419fbc2

This commit is contained in:
Simon Christ 2022-05-02 14:25:45 +02:00 committed by GitHub
commit 7a73c7f3b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 47 additions and 26 deletions

View File

@ -592,7 +592,7 @@ function axis_limits(
sp,
letter,
should_widen = default_should_widen(sp[get_attr_symbol(letter, :axis)]),
consider_aspect = true,
consider_aspect = sp[:aspect_ratio] (:auto, :none),
)
axis = sp[get_attr_symbol(letter, :axis)]
ex = axis[:extrema]
@ -638,13 +638,17 @@ function axis_limits(
amin, amax
end
if (
!has_user_lims &&
consider_aspect &&
letter in (:x, :y) &&
!(sp[:aspect_ratio] in (:none, :auto) || RecipesPipeline.is3d(:sp))
if !has_user_lims && consider_aspect
aspect_ratio = sp[:aspect_ratio]
aspect_ratio =
isa(aspect_ratio, Number) ? aspect_ratio :
aspect_ratio === :equal ? 1 :
throw(
ArgumentError(
"Unsuppported value $aspect_ratio for keyword `aspect_ratio`.",
),
)
aspect_ratio = isa(sp[:aspect_ratio], Number) ? sp[:aspect_ratio] : 1
if !RecipesPipeline.is3d(sp)
plot_ratio = height(plotarea(sp)) / width(plotarea(sp))
dist = amax - amin
@ -665,8 +669,24 @@ function axis_limits(
amin = center + factor * (amin - center)
amax = center + factor * (amax - center)
end
else
# TODO: support arbitrary box ratios
if aspect_ratio == 1
x12, y12, z12 = extrema(sp, :x), extrema(sp, :y), extrema(sp, :z)
d = maximum((x12[2] - x12[1], y12[2] - y12[1], z12[2] - z12[1])) / 2
amin, amax = if letter == :x
xm = mean(x12)
xm - d, xm + d
elseif letter == :y
ym = mean(y12)
ym - d, ym + d
elseif letter == :z
zm = mean(z12)
zm - d, zm + d
end
end
end
end
return amin, amax
end

View File

@ -43,6 +43,7 @@ mutable struct Subplot{T<:AbstractBackend} <: AbstractLayout
end
Base.show(io::IO, sp::Subplot) = print(io, "Subplot{$(sp[:subplot_index])}")
Base.extrema(sp::Subplot, letter::Symbol) = minimum(minimum.(getindex.(sp.series_list, letter))), maximum(maximum.(getindex.(sp.series_list, letter)))
# -----------------------------------------------------------