Plotly: Enable specified contour values for ranges; warn otherwise (#3757)
This commit is contained in:
@@ -31,6 +31,7 @@ end # testset
|
||||
include("test_defaults.jl")
|
||||
include("test_pipeline.jl")
|
||||
include("test_axes.jl")
|
||||
include("test_contours.jl")
|
||||
include("test_axis_letter.jl")
|
||||
include("test_components.jl")
|
||||
include("test_shorthands.jl")
|
||||
@@ -38,6 +39,7 @@ include("integration_dates.jl")
|
||||
include("test_recipes.jl")
|
||||
include("test_hdf5plots.jl")
|
||||
include("test_pgfplotsx.jl")
|
||||
include("test_plotly.jl")
|
||||
|
||||
reference_dir(args...) =
|
||||
joinpath(homedir(), ".julia", "dev", "PlotReferenceImages", args...)
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
using Plots, Test
|
||||
import RecipesPipeline
|
||||
|
||||
@testset "Contours" begin
|
||||
@testset "check_contour_levels" begin
|
||||
@test Plots.check_contour_levels(2) === nothing
|
||||
@test Plots.check_contour_levels(-1.0:0.2:10.0) === nothing
|
||||
@test Plots.check_contour_levels([-100, -2, -1, 0, 1, 2, 100]) === nothing
|
||||
@test_throws ArgumentError Plots.check_contour_levels(1.0)
|
||||
@test_throws ArgumentError Plots.check_contour_levels((1, 2, 3))
|
||||
@test_throws ArgumentError Plots.check_contour_levels(-3)
|
||||
end
|
||||
|
||||
@testset "RecipesPipeline.preprocess_attributes!" begin
|
||||
function equal_after_pipeline(kw)
|
||||
kw′ = deepcopy(kw)
|
||||
RecipesPipeline.preprocess_attributes!(kw′)
|
||||
kw == kw′
|
||||
end
|
||||
|
||||
@test equal_after_pipeline(KW(:levels => 1))
|
||||
@test equal_after_pipeline(KW(:levels => 1:10))
|
||||
@test equal_after_pipeline(KW(:levels => [1.0, 3.0, 5.0]))
|
||||
@test_throws ArgumentError RecipesPipeline.preprocess_attributes!(
|
||||
KW(:levels => 1.0),
|
||||
)
|
||||
@test_throws ArgumentError RecipesPipeline.preprocess_attributes!(
|
||||
KW(:levels => (1, 2, 3)),
|
||||
)
|
||||
@test_throws ArgumentError RecipesPipeline.preprocess_attributes!(KW(:levels => -3))
|
||||
end
|
||||
|
||||
@testset "contour[f]" begin
|
||||
x = (-2π):0.1:(2π)
|
||||
y = (-π):0.1:π
|
||||
z = cos.(y) .* sin.(x')
|
||||
|
||||
@testset "Incorrect input" begin
|
||||
@test_throws ArgumentError contour(x, y, z, levels = 1.0)
|
||||
@test_throws ArgumentError contour(x, y, z, levels = (1, 2, 3))
|
||||
@test_throws ArgumentError contour(x, y, z, levels = -3)
|
||||
end
|
||||
|
||||
@testset "Default number" begin
|
||||
@test contour(x, y, z)[1][1].plotattributes[:levels] ==
|
||||
Plots._series_defaults[:levels]
|
||||
end
|
||||
|
||||
@testset "Number" begin
|
||||
@testset "$n contours" for n in (2, 5, 100)
|
||||
p = contour(x, y, z, levels = n)
|
||||
attr = p[1][1].plotattributes
|
||||
@test attr[:seriestype] == :contour
|
||||
@test attr[:levels] == n
|
||||
end
|
||||
end
|
||||
|
||||
@testset "Range" begin
|
||||
levels = -1:0.5:1
|
||||
@test contour(x, y, z, levels = levels)[1][1].plotattributes[:levels] == levels
|
||||
end
|
||||
|
||||
@testset "Set of levels" begin
|
||||
levels = [-1, 0.25, 0, 0.25, 1]
|
||||
@test contour(x, y, z, levels = levels)[1][1].plotattributes[:levels] == levels
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,57 @@
|
||||
using Plots, Test
|
||||
|
||||
@testset "Plotly" begin
|
||||
@testset "Basic" begin
|
||||
@test plotly() == Plots.PlotlyBackend()
|
||||
@test backend() == Plots.PlotlyBackend()
|
||||
|
||||
p = plot(rand(10))
|
||||
@test isa(p, Plots.Plot) == true
|
||||
end
|
||||
|
||||
@testset "Contours" begin
|
||||
x = (-2π):0.1:(2π)
|
||||
y = (-π):0.1:π
|
||||
z = cos.(y) .* sin.(x')
|
||||
|
||||
@testset "Contour numbers" begin
|
||||
@testset "Default" begin
|
||||
@test Plots.plotly_series(contour(x, y, z))[1][:ncontours] ==
|
||||
Plots._series_defaults[:levels] + 2
|
||||
end
|
||||
@testset "Specified number" begin
|
||||
@test Plots.plotly_series(contour(x, y, z, levels = 10))[1][:ncontours] ==
|
||||
12
|
||||
end
|
||||
end
|
||||
|
||||
@testset "Contour values" begin
|
||||
@testset "Range" begin
|
||||
levels = -1:0.5:1
|
||||
p = contour(x, y, z, levels = levels)
|
||||
@test p[1][1].plotattributes[:levels] == levels
|
||||
@test Plots.plotly_series(p)[1][:contours][:start] == first(levels)
|
||||
@test Plots.plotly_series(p)[1][:contours][:end] == last(levels)
|
||||
@test Plots.plotly_series(p)[1][:contours][:size] == step(levels)
|
||||
end
|
||||
|
||||
@testset "Set of contours" begin
|
||||
levels = [-1, -0.25, 0, 0.25, 1]
|
||||
levels_range =
|
||||
range(first(levels), stop = last(levels), length = length(levels))
|
||||
p = contour(x, y, z, levels = levels)
|
||||
@test p[1][1].plotattributes[:levels] == levels
|
||||
series_dict = @test_logs (
|
||||
:warn,
|
||||
"setting arbitrary contour levels with Plotly backend " *
|
||||
"is not supported; use a range to set equally-spaced contours or an " *
|
||||
"integer to set the approximate number of contours with the keyword " *
|
||||
"`levels`. Setting levels to -1.0:0.5:1.0",
|
||||
) Plots.plotly_series(p)
|
||||
@test series_dict[1][:contours][:start] == first(levels_range)
|
||||
@test series_dict[1][:contours][:end] == last(levels_range)
|
||||
@test series_dict[1][:contours][:size] == step(levels_range)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user