From a14b6b3b0ce3e2127c4207ddcb24511d37e2942c Mon Sep 17 00:00:00 2001 From: Leon von Rabenmond Date: Wed, 17 Aug 2022 15:05:17 +0200 Subject: [PATCH 1/3] Add Makie.jl recipes --- Project.toml | 1 + README.md | 3 ++- src/plot-recipes.jl | 37 ++++++++++++++++++++++++++++++++----- 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/Project.toml b/Project.toml index 04d9f2f5..94a90bda 100644 --- a/Project.toml +++ b/Project.toml @@ -6,6 +6,7 @@ version = "2.7.2" [deps] Calculus = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" Requires = "ae029012-a4dd-5104-9daa-d747884805df" diff --git a/README.md b/README.md index 9554edfe..2da5c333 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,8 @@ easy-to-use calculator. measurements with their physical units, perform numerical integration with [`QuadGK.jl`](https://github.com/JuliaMath/QuadGK.jl), numerical and automatic differentiation, and much more. -* Integration with [`Plots.jl`](https://github.com/JuliaPlots/Plots.jl). +* Integration with [`Plots.jl`](https://github.com/JuliaPlots/Plots.jl) and + [`Makie.jl`](https://github.com/JuliaPlots/Makie.jl). The method used to handle functional correlation is described in this paper: diff --git a/src/plot-recipes.jl b/src/plot-recipes.jl index 1aaa0d6a..6475578e 100644 --- a/src/plot-recipes.jl +++ b/src/plot-recipes.jl @@ -16,31 +16,58 @@ ### Code: using RecipesBase +using Makie -@recipe function f(y::AbstractArray{<:Measurement}) +### Plots.jl + +RecipesBase.@recipe function f(y::AbstractArray{<:Measurement}) yerror := uncertainty.(y) value.(y) end -@recipe function f(func::Function, x::AbstractArray{<:Measurement}) +RecipesBase.@recipe function f(func::Function, x::AbstractArray{<:Measurement}) y = func.(x) xerror := uncertainty.(x) yerror := uncertainty.(y) value.(x), value.(y) end -@recipe function f(x::AbstractArray{<:Measurement}, y::AbstractArray{<:Measurement}) +RecipesBase.@recipe function f(x::AbstractArray{<:Measurement}, y::AbstractArray{<:Measurement}) xerror := uncertainty.(x) yerror := uncertainty.(y) value.(x), value.(y) end -@recipe function f(x::AbstractArray{<:Measurement}, y::AbstractArray) +RecipesBase.@recipe function f(x::AbstractArray{<:Measurement}, y::AbstractArray) xerror := uncertainty.(x) value.(x), y end -@recipe function f(x::AbstractArray, y::AbstractArray{<:Measurement}) +RecipesBase.@recipe function f(x::AbstractArray, y::AbstractArray{<:Measurement}) yerror := uncertainty.(y) x, value.(y) end + +### Makie.jl + +# PointBased plots +Makie.convert_arguments(P::Makie.PointBased, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Measurement}) = + Makie.convert_arguments(P, value.(x), value.(y)) +Makie.convert_arguments(P::Makie.PointBased, x::AbstractVector{<:Real}, y::AbstractVector{<:Measurement}) = + Makie.convert_arguments(P, x, value.(y)) +Makie.convert_arguments(P::Makie.PointBased, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Real}) = + Makie.convert_arguments(P, value.(x), y) + +# errorbars +Makie.convert_arguments(P::Type{<:Errorbars}, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Measurement}, e::AbstractVector{<:Measurement}) = + Makie.convert_arguments(P, value.(x), value.(y), uncertainty.(e)) +Makie.convert_arguments(P::Type{<:Errorbars}, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Real}) = + Makie.convert_arguments(P, value.(x), y, uncertainty.(x)) +Makie.convert_arguments(P::Type{<:Errorbars}, x::AbstractVector{<:Real}, y::AbstractVector{<:Measurement}) = + Makie.convert_arguments(P, x, value.(y), uncertainty.(y)) + +# band +Makie.convert_arguments(P::Type{<:Band}, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Measurement}) = + Makie.convert_arguments(P, value.(x), value.(y) - uncertainty.(y), value.(y) + uncertainty.(y)) +Makie.convert_arguments(P::Type{<:Band}, x::AbstractVector{<:Real}, y::AbstractVector{<:Measurement}) = + Makie.convert_arguments(P, x, value.(y) - uncertainty.(y), value.(y) + uncertainty.(y)) From c1670d69c22be419d9a787ebce7cfd858569fb40 Mon Sep 17 00:00:00 2001 From: Leon von Rabenmond Date: Thu, 18 Aug 2022 14:13:25 +0200 Subject: [PATCH 2/3] PointBased conversion under MakieCore (no errorbars or bands) --- Project.toml | 2 +- src/plot-recipes.jl | 16 +++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Project.toml b/Project.toml index 94a90bda..5b25d958 100644 --- a/Project.toml +++ b/Project.toml @@ -6,7 +6,7 @@ version = "2.7.2" [deps] Calculus = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" +MakieCore = "20f20a25-4f0e-4fdf-b5d1-57303727442b" Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" Requires = "ae029012-a4dd-5104-9daa-d747884805df" diff --git a/src/plot-recipes.jl b/src/plot-recipes.jl index 6475578e..ddabb506 100644 --- a/src/plot-recipes.jl +++ b/src/plot-recipes.jl @@ -16,7 +16,7 @@ ### Code: using RecipesBase -using Makie +using MakieCore ### Plots.jl @@ -51,13 +51,14 @@ end ### Makie.jl # PointBased plots -Makie.convert_arguments(P::Makie.PointBased, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Measurement}) = - Makie.convert_arguments(P, value.(x), value.(y)) -Makie.convert_arguments(P::Makie.PointBased, x::AbstractVector{<:Real}, y::AbstractVector{<:Measurement}) = - Makie.convert_arguments(P, x, value.(y)) -Makie.convert_arguments(P::Makie.PointBased, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Real}) = - Makie.convert_arguments(P, value.(x), y) +MakieCore.convert_arguments(P::MakieCore.PointBased, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Measurement}) = + MakieCore.convert_arguments(P, value.(x), value.(y)) +MakieCore.convert_arguments(P::MakieCore.PointBased, x::AbstractVector{<:Real}, y::AbstractVector{<:Measurement}) = + MakieCore.convert_arguments(P, x, value.(y)) +MakieCore.convert_arguments(P::MakieCore.PointBased, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Real}) = + MakieCore.convert_arguments(P, value.(x), y) +#= # errorbars Makie.convert_arguments(P::Type{<:Errorbars}, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Measurement}, e::AbstractVector{<:Measurement}) = Makie.convert_arguments(P, value.(x), value.(y), uncertainty.(e)) @@ -71,3 +72,4 @@ Makie.convert_arguments(P::Type{<:Band}, x::AbstractVector{<:Measurement}, y::Ab Makie.convert_arguments(P, value.(x), value.(y) - uncertainty.(y), value.(y) + uncertainty.(y)) Makie.convert_arguments(P::Type{<:Band}, x::AbstractVector{<:Real}, y::AbstractVector{<:Measurement}) = Makie.convert_arguments(P, x, value.(y) - uncertainty.(y), value.(y) + uncertainty.(y)) +=# From b43f8fc740ba8365bd7e23083ce8e487dfec85a6 Mon Sep 17 00:00:00 2001 From: Leon von Rabenmond Date: Mon, 24 Oct 2022 22:28:49 +0200 Subject: [PATCH 3/3] Added Makie as an optional dependency --- Project.toml | 1 - src/Measurements.jl | 4 ++++ src/makie-recipes.jl | 23 +++++++++++++++++++++++ src/plot-recipes.jl | 27 --------------------------- 4 files changed, 27 insertions(+), 28 deletions(-) create mode 100644 src/makie-recipes.jl diff --git a/Project.toml b/Project.toml index 77968cdc..1d165270 100644 --- a/Project.toml +++ b/Project.toml @@ -6,7 +6,6 @@ version = "2.9.0" [deps] Calculus = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -MakieCore = "20f20a25-4f0e-4fdf-b5d1-57303727442b" Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" Requires = "ae029012-a4dd-5104-9daa-d747884805df" diff --git a/src/Measurements.jl b/src/Measurements.jl index cdee6eac..29e30bcc 100644 --- a/src/Measurements.jl +++ b/src/Measurements.jl @@ -126,4 +126,8 @@ include("show.jl") include("parsing.jl") include("plot-recipes.jl") +function __init__() + @require Makie="ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" include("makie-recipes.jl") +end + end # module diff --git a/src/makie-recipes.jl b/src/makie-recipes.jl new file mode 100644 index 00000000..8cc6329b --- /dev/null +++ b/src/makie-recipes.jl @@ -0,0 +1,23 @@ +using .Makie + +# PointBased plots +Makie.convert_arguments(P::PointBased, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Measurement}) = + convert_arguments(P, value.(x), value.(y)) +Makie.convert_arguments(P::PointBased, x::AbstractVector{<:Real}, y::AbstractVector{<:Measurement}) = + convert_arguments(P, x, value.(y)) +Makie.convert_arguments(P::PointBased, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Real}) = + convert_arguments(P, value.(x), y) + +# errorbars +Makie.convert_arguments(P::Type{<:Errorbars}, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Measurement}, e::AbstractVector{<:Measurement}) = + convert_arguments(P, value.(x), value.(y), uncertainty.(e)) +Makie.convert_arguments(P::Type{<:Errorbars}, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Real}) = + convert_arguments(P, value.(x), y, uncertainty.(x)) +Makie.convert_arguments(P::Type{<:Errorbars}, x::AbstractVector{<:Real}, y::AbstractVector{<:Measurement}) = + convert_arguments(P, x, value.(y), uncertainty.(y)) + +# band +Makie.convert_arguments(P::Type{<:Band}, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Measurement}) = + convert_arguments(P, value.(x), value.(y) - uncertainty.(y), value.(y) + uncertainty.(y)) +Makie.convert_arguments(P::Type{<:Band}, x::AbstractVector{<:Real}, y::AbstractVector{<:Measurement}) = + convert_arguments(P, x, value.(y) - uncertainty.(y), value.(y) + uncertainty.(y)) \ No newline at end of file diff --git a/src/plot-recipes.jl b/src/plot-recipes.jl index ddabb506..7fa3bb5c 100644 --- a/src/plot-recipes.jl +++ b/src/plot-recipes.jl @@ -16,7 +16,6 @@ ### Code: using RecipesBase -using MakieCore ### Plots.jl @@ -47,29 +46,3 @@ RecipesBase.@recipe function f(x::AbstractArray, y::AbstractArray{<:Measurement} yerror := uncertainty.(y) x, value.(y) end - -### Makie.jl - -# PointBased plots -MakieCore.convert_arguments(P::MakieCore.PointBased, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Measurement}) = - MakieCore.convert_arguments(P, value.(x), value.(y)) -MakieCore.convert_arguments(P::MakieCore.PointBased, x::AbstractVector{<:Real}, y::AbstractVector{<:Measurement}) = - MakieCore.convert_arguments(P, x, value.(y)) -MakieCore.convert_arguments(P::MakieCore.PointBased, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Real}) = - MakieCore.convert_arguments(P, value.(x), y) - -#= -# errorbars -Makie.convert_arguments(P::Type{<:Errorbars}, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Measurement}, e::AbstractVector{<:Measurement}) = - Makie.convert_arguments(P, value.(x), value.(y), uncertainty.(e)) -Makie.convert_arguments(P::Type{<:Errorbars}, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Real}) = - Makie.convert_arguments(P, value.(x), y, uncertainty.(x)) -Makie.convert_arguments(P::Type{<:Errorbars}, x::AbstractVector{<:Real}, y::AbstractVector{<:Measurement}) = - Makie.convert_arguments(P, x, value.(y), uncertainty.(y)) - -# band -Makie.convert_arguments(P::Type{<:Band}, x::AbstractVector{<:Measurement}, y::AbstractVector{<:Measurement}) = - Makie.convert_arguments(P, value.(x), value.(y) - uncertainty.(y), value.(y) + uncertainty.(y)) -Makie.convert_arguments(P::Type{<:Band}, x::AbstractVector{<:Real}, y::AbstractVector{<:Measurement}) = - Makie.convert_arguments(P, x, value.(y) - uncertainty.(y), value.(y) + uncertainty.(y)) -=#