From fc2b59c8c54b515d3b882b77236e7b6651ca0061 Mon Sep 17 00:00:00 2001 From: Dongdong Kong Date: Tue, 9 Apr 2024 22:14:52 +0800 Subject: [PATCH] add bind_z! and bind_text! --- src/Base.jl | 9 --------- src/Layers/Base.jl | 42 +++++++++++++++++++++++++++++++++++++++++ src/Layers/Layers.jl | 1 + src/Layers/imagesc.jl | 19 ++++++------------- src/MakieLayers.jl | 1 - src/colormap.jl | 2 +- test/test-Observable.jl | 10 ++++++++++ 7 files changed, 60 insertions(+), 24 deletions(-) delete mode 100644 src/Base.jl create mode 100644 src/Layers/Base.jl create mode 100644 test/test-Observable.jl diff --git a/src/Base.jl b/src/Base.jl deleted file mode 100644 index ef1d984..0000000 --- a/src/Base.jl +++ /dev/null @@ -1,9 +0,0 @@ -Base.size(x::Observable) = size(x[]) -Base.size(x::Observable, i) = size(x[], i) - -function gap!(fig, gap=0) - rowgap!(fig.layout, gap) - colgap!(fig.layout, gap) -end - -export gap! diff --git a/src/Layers/Base.jl b/src/Layers/Base.jl new file mode 100644 index 0000000..1b0da2b --- /dev/null +++ b/src/Layers/Base.jl @@ -0,0 +1,42 @@ +export gap! +export bind_text!, bind_z!, add_labels! + +Base.size(x::Observable) = size(x[]) +Base.size(x::Observable, i) = size(x[], i) + +function gap!(fig, gap=0) + rowgap!(fig.layout, gap) + colgap!(fig.layout, gap) +end + + +function bind_text!(plts::Vector, labels::Observable{Vector{String}}) + on(labels) do labels + for i in eachindex(plts) + plts[i].text[] = labels[i] + end + end +end + +# for not Observable +bind_z!(plts, z) = nothing + +function bind_z!(plts::Vector, z::Observable{<:AbstractArray{<:Real,3}}) + on(z) do z + for i in eachindex(plts) + plts[i][3] = z[:, :, i] + end + end +end + + +function add_labels!(axs::Vector, labels::Observable, x, y; + fontsize=30, align=(:left, :top), offset=(10, -5)) + plts = [] + for i in eachindex(axs) + label = labels[][i] + plt = text!(axs[i], x, y, text=label; fontsize, align, offset) + push!(plts, plt) + end + bind_text!(plts, labels) +end diff --git a/src/Layers/Layers.jl b/src/Layers/Layers.jl index f23e9b9..7d23510 100644 --- a/src/Layers/Layers.jl +++ b/src/Layers/Layers.jl @@ -1,6 +1,7 @@ export dateseries! export imagesc!, imagesc +include("Base.jl") include("dateseries.jl") include("imagesc.jl") # include("datevspan.jl") diff --git a/src/Layers/imagesc.jl b/src/Layers/imagesc.jl index 8872e63..e8c7bd6 100644 --- a/src/Layers/imagesc.jl +++ b/src/Layers/imagesc.jl @@ -73,6 +73,7 @@ function imagesc!(fig::Union{Figure,GridPosition,GridSubposition}, (fun_axis!)=nothing, kw...) where {R<:AbstractArray{<:Real,3}} + length(gap) == 1 && (gap = (gap, gap)) n = size(z, 3) if layout === nothing ncol = ceil(Int, sqrt(n)) @@ -82,10 +83,10 @@ function imagesc!(fig::Union{Figure,GridPosition,GridSubposition}, end titles === nothing && (titles = fill("", n)) - k = 0 - # ax, plt = nothing, nothing axs = [] plts = [] + + k = 0 for i = 1:nrow, j = 1:ncol k += 1 k > n && break @@ -102,22 +103,14 @@ function imagesc!(fig::Union{Figure,GridPosition,GridSubposition}, push!(axs, ax) push!(plts, plt) end - - # update plot - if isa(z, Observable) - on(z) do z - for i = 1:n - plts[i][3] = z[:, :, i] - end - end - end + bind_z!(plts, z) # unify the legend (colorrange != automatic && !force_show_legend) && Colorbar(fig[1:nrow, ncol+1], plts[1]) - rowgap!(fig.layout, gap) - colgap!(fig.layout, gap) + rowgap!(fig.layout, gap[1]) + colgap!(fig.layout, gap[2]) axs, plts end diff --git a/src/MakieLayers.jl b/src/MakieLayers.jl index 913bcd9..07b8321 100644 --- a/src/MakieLayers.jl +++ b/src/MakieLayers.jl @@ -10,7 +10,6 @@ export automatic export map_on_keyboard, map_on_mouse export my_theme! -include("Base.jl") include("convert_arguments.jl") include("Layers/Layers.jl") include("events.jl") diff --git a/src/colormap.jl b/src/colormap.jl index 64f6e09..f6b7d8a 100644 --- a/src/colormap.jl +++ b/src/colormap.jl @@ -7,7 +7,7 @@ using Serialization: serialize, deserialize using Colors using ColorSchemes -nan_color = RGBA(1.0, 1.0, 1.0, 0.2) +nan_color = RGBA(1.0, 1.0, 1.0, 0.0) project_path(f...) = normpath(joinpath(@__DIR__, "..", f...)) load(f) = deserialize(project_path(f)) diff --git a/test/test-Observable.jl b/test/test-Observable.jl new file mode 100644 index 0000000..6018552 --- /dev/null +++ b/test/test-Observable.jl @@ -0,0 +1,10 @@ +begin + z = Observable(rand(4, 4, 4)) + + fig = Figure() + imagesc!(fig, z) + fig +end + +z[] = rand(4, 4, 4) +# if z changed, fig will update