Skip to content

Commit

Permalink
fix vlines! and vspan!
Browse files Browse the repository at this point in the history
  • Loading branch information
kongdd committed Feb 5, 2025
1 parent 46b2e3c commit b9b2072
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 37 deletions.
2 changes: 0 additions & 2 deletions src/Layers/dateseries.jl
Original file line number Diff line number Diff line change
Expand Up @@ -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...)
Expand Down
36 changes: 27 additions & 9 deletions src/convert_arguments.jl
Original file line number Diff line number Diff line change
@@ -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...)
Expand All @@ -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),)
27 changes: 1 addition & 26 deletions test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
29 changes: 29 additions & 0 deletions test/test-date.jl
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit b9b2072

Please sign in to comment.