From 0d665c661f23a4248d2ecb76a723e4efbbd7a592 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas Date: Sat, 15 Apr 2017 13:14:14 -0700 Subject: [PATCH 1/6] complex recipe --- src/recipes.jl | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/recipes.jl b/src/recipes.jl index 3f63ea40..83b3a8e8 100644 --- a/src/recipes.jl +++ b/src/recipes.jl @@ -809,6 +809,18 @@ datetimeformatter(dt) = string(convert(DateTime, dt)) real(cp.args[1]), imag(cp.args[1]) end +# Splits a complex matrix to its real and complex parts +# Reals defaults solid, imaginary defaults dashed +# Label defaults are changed to match the real-imaginary reference / indexing +@recipe function f{T<:Number,T2<:Number}(x::AbstractArray{T},y::Array{Complex{T2}}) + A = real.(y) + B = imag.(y) + _y = [!iseven(i) ? A[:,i÷2+1] : B[:,i÷2] for i in 1:2size(A,2)] + linestyle --> reshape([!iseven(i) ? :solid : :dash for i in 1:2size(A,2)],1,2size(A,2)) + label --> reshape([!iseven(i) ? "Re(y$(i÷2+1))" : "Im(y$(i÷2))" for i in 1:2size(A,2)],1,2size(A,2)) + x,_y +end + # -------------------------------------------------- # Color Gradients From 1852ba99b35b96c6b2a858c3744c1edcd32ed334 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas Date: Sat, 15 Apr 2017 13:16:40 -0700 Subject: [PATCH 2/6] force real x --- src/recipes.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/recipes.jl b/src/recipes.jl index 83b3a8e8..a22dc069 100644 --- a/src/recipes.jl +++ b/src/recipes.jl @@ -811,8 +811,8 @@ end # Splits a complex matrix to its real and complex parts # Reals defaults solid, imaginary defaults dashed -# Label defaults are changed to match the real-imaginary reference / indexing -@recipe function f{T<:Number,T2<:Number}(x::AbstractArray{T},y::Array{Complex{T2}}) +# Label defaults are changed to match the real-imaginary reference / indexing +@recipe function f{T<:Real,T2<:Number}(x::AbstractArray{T},y::Array{Complex{T2}}) A = real.(y) B = imag.(y) _y = [!iseven(i) ? A[:,i÷2+1] : B[:,i÷2] for i in 1:2size(A,2)] From 9a59df793dba43aed9104598b3d6ae591840d859 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas Date: Sat, 15 Apr 2017 17:00:00 -0700 Subject: [PATCH 3/6] coloring setup --- src/recipes.jl | 1 + 1 file changed, 1 insertion(+) diff --git a/src/recipes.jl b/src/recipes.jl index a22dc069..984b4a0a 100644 --- a/src/recipes.jl +++ b/src/recipes.jl @@ -818,6 +818,7 @@ end _y = [!iseven(i) ? A[:,i÷2+1] : B[:,i÷2] for i in 1:2size(A,2)] linestyle --> reshape([!iseven(i) ? :solid : :dash for i in 1:2size(A,2)],1,2size(A,2)) label --> reshape([!iseven(i) ? "Re(y$(i÷2+1))" : "Im(y$(i÷2))" for i in 1:2size(A,2)],1,2size(A,2)) + color --> reshape([!iseven(i) ? i÷2+1 : i÷2 for i in 1:2size(A,2)],1,2size(A,2)) x,_y end From 7def4e8e7372cff8b6d046d8f578635964f173a9 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas Date: Sun, 16 Apr 2017 13:01:51 -0700 Subject: [PATCH 4/6] add transformation option --- src/recipes.jl | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/recipes.jl b/src/recipes.jl index 984b4a0a..1bef17c8 100644 --- a/src/recipes.jl +++ b/src/recipes.jl @@ -812,14 +812,30 @@ end # Splits a complex matrix to its real and complex parts # Reals defaults solid, imaginary defaults dashed # Label defaults are changed to match the real-imaginary reference / indexing -@recipe function f{T<:Real,T2<:Number}(x::AbstractArray{T},y::Array{Complex{T2}}) - A = real.(y) - B = imag.(y) - _y = [!iseven(i) ? A[:,i÷2+1] : B[:,i÷2] for i in 1:2size(A,2)] - linestyle --> reshape([!iseven(i) ? :solid : :dash for i in 1:2size(A,2)],1,2size(A,2)) - label --> reshape([!iseven(i) ? "Re(y$(i÷2+1))" : "Im(y$(i÷2))" for i in 1:2size(A,2)],1,2size(A,2)) - color --> reshape([!iseven(i) ? i÷2+1 : i÷2 for i in 1:2size(A,2)],1,2size(A,2)) - x,_y +@recipe function f{T<:Real,T2<:Number}(x::AbstractArray{T},y::Array{Complex{T2}}; + transformation=:split2D) + if transformation==:split2D + A = real.(y) + B = imag.(y) + _y = [!iseven(i) ? A[:,i÷2+1] : B[:,i÷2] for i in 1:2size(A,2)] + linestyle --> reshape([!iseven(i) ? :solid : :dash for i in 1:2size(A,2)],1,2size(A,2)) + label --> reshape([!iseven(i) ? "Re(y$(i÷2+1))" : "Im(y$(i÷2))" for i in 1:2size(A,2)],1,2size(A,2)) + color --> reshape([!iseven(i) ? i÷2+1 : i÷2 for i in 1:2size(A,2)],1,2size(A,2)) + retval = (x,_y) + elseif transformation==:split3D + A = real.(y) + B = imag.(y) + ylabel --> "Re(y)" + zlabel --> "Im(y)" + retval = (x,A,B) + elseif transformation==:modulus + _y = norm.(y) + label --> reshape(["||y$(i)||" for i in 1:size(_y,2)],1,size(_y,2)) + retval = (x,_y) + else + error("Transformation unknown. Please use :split2D, :split3D, or :modulus") + end + (retval...) end From 0be08242077129b3c40da812b793d746ac45f187 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas Date: Sun, 16 Apr 2017 13:14:12 -0700 Subject: [PATCH 5/6] (complex) type recipe --- src/recipes.jl | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/recipes.jl b/src/recipes.jl index 1bef17c8..48c201bf 100644 --- a/src/recipes.jl +++ b/src/recipes.jl @@ -801,12 +801,10 @@ datetimeformatter(dt) = string(convert(DateTime, dt)) # ------------------------------------------------- # Complex Numbers -@userplot ComplexPlot -@recipe function f(cp::ComplexPlot) - xguide --> "Real Part" - yguide --> "Imaginary Part" - seriestype --> :scatter - real(cp.args[1]), imag(cp.args[1]) +@recipe function f{T<:Number}(A::Array{Complex{T}}) + xguide --> "Re(x)" + yguide --> "Im(x)" + real.(A), imag.(A) end # Splits a complex matrix to its real and complex parts From 3e7dd9bb77cd51ac432aaae5c5e7bdfb481f3566 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas Date: Mon, 17 Apr 2017 22:15:13 -0700 Subject: [PATCH 6/6] tone down recipe --- src/recipes.jl | 28 ++++------------------------ 1 file changed, 4 insertions(+), 24 deletions(-) diff --git a/src/recipes.jl b/src/recipes.jl index 48c201bf..5be5b6e0 100644 --- a/src/recipes.jl +++ b/src/recipes.jl @@ -810,30 +810,10 @@ end # Splits a complex matrix to its real and complex parts # Reals defaults solid, imaginary defaults dashed # Label defaults are changed to match the real-imaginary reference / indexing -@recipe function f{T<:Real,T2<:Number}(x::AbstractArray{T},y::Array{Complex{T2}}; - transformation=:split2D) - if transformation==:split2D - A = real.(y) - B = imag.(y) - _y = [!iseven(i) ? A[:,i÷2+1] : B[:,i÷2] for i in 1:2size(A,2)] - linestyle --> reshape([!iseven(i) ? :solid : :dash for i in 1:2size(A,2)],1,2size(A,2)) - label --> reshape([!iseven(i) ? "Re(y$(i÷2+1))" : "Im(y$(i÷2))" for i in 1:2size(A,2)],1,2size(A,2)) - color --> reshape([!iseven(i) ? i÷2+1 : i÷2 for i in 1:2size(A,2)],1,2size(A,2)) - retval = (x,_y) - elseif transformation==:split3D - A = real.(y) - B = imag.(y) - ylabel --> "Re(y)" - zlabel --> "Im(y)" - retval = (x,A,B) - elseif transformation==:modulus - _y = norm.(y) - label --> reshape(["||y$(i)||" for i in 1:size(_y,2)],1,size(_y,2)) - retval = (x,_y) - else - error("Transformation unknown. Please use :split2D, :split3D, or :modulus") - end - (retval...) +@recipe function f{T<:Real,T2}(x::AbstractArray{T},y::Array{Complex{T2}}) + ylabel --> "Re(y)" + zlabel --> "Im(y)" + x,real.(y),imag.(y) end