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/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 1aaa0d6a..7fa3bb5c 100644 --- a/src/plot-recipes.jl +++ b/src/plot-recipes.jl @@ -17,30 +17,32 @@ using RecipesBase -@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