From b9b20725b592ffd8d244dc6750ded1e67f62be0d Mon Sep 17 00:00:00 2001 From: Dongdong Kong Date: Wed, 5 Feb 2025 16:34:00 +0800 Subject: [PATCH] fix vlines! and vspan! --- src/Layers/dateseries.jl | 2 -- src/convert_arguments.jl | 36 +++++++++++++++++++++++++++--------- test/runtests.jl | 27 +-------------------------- test/test-date.jl | 29 +++++++++++++++++++++++++++++ 4 files changed, 57 insertions(+), 37 deletions(-) create mode 100644 test/test-date.jl diff --git a/src/Layers/dateseries.jl b/src/Layers/dateseries.jl index db2da9c..5e7d88c 100644 --- a/src/Layers/dateseries.jl +++ b/src/Layers/dateseries.jl @@ -2,14 +2,12 @@ import Makie: plot!, plot, @recipe, @extract, xlims! import Makie: Series using PlotUtils: optimize_ticks, optimize_datetime_ticks -date2num = datetime2unix # datetime2julian, datetime2rata, datetime2unix function get_date_ticks(dates; fmt="mm/dd") dateticks = optimize_ticks(dates[1], dates[end])[1] (date2num.(dateticks), Dates.format.(dateticks, fmt)) end - # ## How to update ticks for Dates # function get_ticks(t::AbstractVector{DateTime}, any_scale, ::Automatic, vmin, vmax; kw...) # get_date_ticks(t; kw...) diff --git a/src/convert_arguments.jl b/src/convert_arguments.jl index 78c96e2..becef0e 100644 --- a/src/convert_arguments.jl +++ b/src/convert_arguments.jl @@ -1,11 +1,11 @@ # using Makie using Dates - import Makie: replace_missing, convert_arguments, convert_single_argument, get_ticks, Automatic -Makie.convert_single_argument(dates::AbstractVector{<:TypeDate}) = date2num.(dates) -Makie.convert_single_argument(date::TypeDate) = date2num(date) |> Float32 +date2num = Makie.date_to_number +# Makie.convert_single_argument(dates::AbstractVector{<:TypeDate}) = date2num.(dates) +# Makie.convert_single_argument(date::TypeDate) = date2num(date) |> Float32 function Makie.convert_arguments(T::PointBased, x::Union{TypeDate,AbstractVector{<:TypeDate}}, args...) @@ -26,10 +26,28 @@ function Makie.convert_arguments(::Type{<:Series}, x::AbstractVector, y::Abstrac ([points],) end -function convert_arguments(::Type{<:Union{HSpan,VSpan}}, low, high) - low = convert_single_argument(low) - high = convert_single_argument(high) - low, high +# function convert_arguments(::Type{<:Union{HSpan,VSpan}}, low, high) +# low = convert_single_argument(low) +# high = convert_single_argument(high) +# low, high +# end +# convert_arguments(::Type{<:Union{HLines,VLines}}, pos) = (convert_single_argument(pos),) + +## Fix for vlines! and vspan! +# https://github.com/MakieOrg/Makie.jl/issues/4412 +import Dates: AbstractTime +import Makie: date_to_number, convert_single_argument +import Makie: DimConversions, NoDimConversion, DateTimeConversion + +Makie.convert_single_argument(dates::AbstractVector{Dates.AbstractTime}) = date_to_number.(dates) +Makie.convert_single_argument(date::DateTime) = date_to_number(date) + +function Base.setindex!(conversions::DimConversions, value::DateTimeConversion, i::Int) + isnothing(value) && return nothing # ignore no conversions + conversions[i] === value && return nothing # ignore same conversion + # only set new conversion if there is none yet + # if isnothing(conversions[i]) || conversions[i] === NoDimConversion() + conversions.conversions[i][] = value + return nothing + # end end - -convert_arguments(::Type{<:Union{HLines,VLines}}, pos) = (convert_single_argument(pos),) diff --git a/test/runtests.jl b/test/runtests.jl index cdd9303..605d873 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -2,32 +2,7 @@ include("main_pkgs.jl") include("test-colorbar.jl") include("test-colors.jl") - -@testset "dateseries" begin - ## good job, test passed - t = DateTime(2020):Day(1):DateTime(2020, 1, 7) |> collect - n = length(t) - x = 1:n - y = rand(n) - data = rand(2, n) - - time = Observable(t) - year = 2020 - time[] = DateTime(year):Day(1):DateTime(year, 1, 7) |> collect - - fig = Figure() - ax = Axis(fig[1, 1]) - dateseries!(ax, time, data, labels=["ea", "es"]) - dateseries!(ax, time, y, label="VPD") - axislegend() - # x = @lift date2num.($time) - # series!(ax, t, y .+ 1) - vspan!(ax, t[2], t[3];) - vlines!(ax, t[4]) - lines!(ax, t, y) - @test_nowarn fig - # time[] = time[] - Day(1) -end +include("test-date.jl") @testset "imagesc" begin x = 2:11 diff --git a/test/test-date.jl b/test/test-date.jl new file mode 100644 index 0000000..1f0594d --- /dev/null +++ b/test/test-date.jl @@ -0,0 +1,29 @@ +using MakieLayers, Test + +@testset "dateseries" begin + ## good job, test passed + t = DateTime(2020):Day(1):DateTime(2020, 1, 7) |> collect + n = length(t) + x = 1:n + y = rand(n) + data = rand(2, n) + + time = Observable(t) + year = 2020 + time[] = DateTime(year):Day(1):DateTime(year, 1, 7) |> collect + + fig = Figure() + ax = Axis(fig[1, 1]) + dateseries!(ax, time, data, labels=["ea", "es"]) + dateseries!(ax, time, y, label="VPD") + axislegend() + + # x = @lift date2num.($time) + series!(ax, t, y .+ 1) + vlines!(ax, t[4]) + lines!(ax, t, y) + vspan!(ax, t[2], t[3]; alpha=0.2) # major error + @test_nowarn fig + # fig + # time[] = time[] - Day(1) +end