diff --git a/src/Plots.jl b/src/Plots.jl index b67abe3f..41381146 100644 --- a/src/Plots.jl +++ b/src/Plots.jl @@ -10,7 +10,7 @@ using Reexport import GeometryTypes, GeometryBasics using Dates, Printf, Statistics, Base64, LinearAlgebra, Random -import SparseArrays: AbstractSparseMatrix, findnz +using SparseArrays using FFMPEG @@ -154,6 +154,12 @@ const BBox = Measures.Absolute2DBox # allow pixels and percentages const px = AbsoluteLength(0.254) const pct = Length{:pct, Float64}(1.0) + +Base.:*(m1::AbsoluteLength, m2::Length{:pct}) = AbsoluteLength(m1.value * m2.value) +Base.:*(m1::Length{:pct}, m2::AbsoluteLength) = AbsoluteLength(m2.value * m1.value) +Base.:/(m1::AbsoluteLength, m2::Length{:pct}) = AbsoluteLength(m1.value / m2.value) +Base.:/(m1::Length{:pct}, m2::AbsoluteLength) = AbsoluteLength(m2.value / m1.value) + export BBox, BoundingBox, mm, cm, inch, px, pct, pt, w, h end @@ -218,8 +224,8 @@ let PlotOrSubplot = Union{Plot, Subplot} global xlims!(plt::PlotOrSubplot, xmin::Real, xmax::Real; kw...) = plot!(plt; xlims = (xmin,xmax), kw...) global ylims!(plt::PlotOrSubplot, ymin::Real, ymax::Real; kw...) = plot!(plt; ylims = (ymin,ymax), kw...) global zlims!(plt::PlotOrSubplot, zmin::Real, zmax::Real; kw...) = plot!(plt; zlims = (zmin,zmax), kw...) - global xticks!(plt::PlotOrSubplot, ticks::TicksArgs; kw...) where {T<:Real} = plot!(plt; xticks = ticks, kw...) - global yticks!(plt::PlotOrSubplot, ticks::TicksArgs; kw...) where {T<:Real} = plot!(plt; yticks = ticks, kw...) + global xticks!(plt::PlotOrSubplot, ticks::TicksArgs; kw...) = plot!(plt; xticks = ticks, kw...) + global yticks!(plt::PlotOrSubplot, ticks::TicksArgs; kw...) = plot!(plt; yticks = ticks, kw...) global xticks!(plt::PlotOrSubplot, ticks::AVec{T}, labels::AVec{S}; kw...) where {T<:Real,S<:AbstractString} = plot!(plt; xticks = (ticks,labels), kw...) global yticks!(plt::PlotOrSubplot, diff --git a/src/backends/plotly.jl b/src/backends/plotly.jl index 7a7d1cfa..fe2af1fc 100644 --- a/src/backends/plotly.jl +++ b/src/backends/plotly.jl @@ -595,9 +595,9 @@ function plotly_series(plt::Plot, series::Series) elseif st == :mesh3d plotattributes_out[:type] = "mesh3d" plotattributes_out[:x], plotattributes_out[:y], plotattributes_out[:z] = x, y, z - - if series[:connections] != nothing - if typeof(series[:connections]) <: Tuple{Array,Array,Array} + + if series[:connections] !== nothing + if typeof(series[:connections]) <: Tuple{Array,Array,Array} i,j,k = series[:connections] if !(length(i) == length(j) == length(k)) throw(ArgumentError("Argument connections must consist of equally sized arrays.")) diff --git a/src/init.jl b/src/init.jl index 54bac3b2..0c431963 100644 --- a/src/init.jl +++ b/src/init.jl @@ -80,7 +80,7 @@ function __init__() artifact_toml = joinpath(@__DIR__, "Artifacts.toml") plotly_sha = artifact_hash("plotly", artifact_toml) - if plotly_sha == nothing || !artifact_exists(plotly_sha) + if plotly_sha === nothing || !artifact_exists(plotly_sha) plotly_sha = create_artifact() do artifact_dir download("https://cdn.plot.ly/plotly-1.54.2.min.js", joinpath(artifact_dir, "plotly-1.54.2.min.js")) end diff --git a/src/layouts.jl b/src/layouts.jl index 7b95c539..57c9c663 100644 --- a/src/layouts.jl +++ b/src/layouts.jl @@ -4,34 +4,6 @@ to_pixels(m::AbsoluteLength) = m.value / 0.254 const _cbar_width = 5mm - -#Base.broadcast(::typeof(Base.:.*), m::Measure, n::Number) = m * n -#Base.broadcast(::typeof(Base.:.*), m::Number, n::Measure) = m * n -Base.:-(m::Measure, a::AbstractArray) = map(ai -> m - ai, a) -Base.:-(a::AbstractArray, m::Measure) = map(ai -> ai - m, a) -Base.zero(::Type{typeof(mm)}) = 0mm -Base.one(::Type{typeof(mm)}) = 1mm -Base.typemin(::typeof(mm)) = -Inf*mm -Base.typemax(::typeof(mm)) = Inf*mm -Base.convert(::Type{F}, l::AbsoluteLength) where {F<:AbstractFloat} = convert(F, l.value) - -# TODO: these are unintuitive and may cause tricky bugs -# Base.:+(m1::AbsoluteLength, m2::Length{:pct}) = AbsoluteLength(m1.value * (1 + m2.value)) -# Base.:+(m1::Length{:pct}, m2::AbsoluteLength) = AbsoluteLength(m2.value * (1 + m1.value)) -# Base.:-(m1::AbsoluteLength, m2::Length{:pct}) = AbsoluteLength(m1.value * (1 - m2.value)) -# Base.:-(m1::Length{:pct}, m2::AbsoluteLength) = AbsoluteLength(m2.value * (m1.value - 1)) - -Base.:*(m1::AbsoluteLength, m2::Length{:pct}) = AbsoluteLength(m1.value * m2.value) -Base.:*(m1::Length{:pct}, m2::AbsoluteLength) = AbsoluteLength(m2.value * m1.value) -Base.:/(m1::AbsoluteLength, m2::Length{:pct}) = AbsoluteLength(m1.value / m2.value) -Base.:/(m1::Length{:pct}, m2::AbsoluteLength) = AbsoluteLength(m2.value / m1.value) - - -Base.zero(::Type{typeof(pct)}) = 0pct -Base.one(::Type{typeof(pct)}) = 1pct -Base.typemin(::typeof(pct)) = 0pct -Base.typemax(::typeof(pct)) = 1pct - const defaultbox = BoundingBox(0mm, 0mm, 0mm, 0mm) left(bbox::BoundingBox) = bbox.x0[1] diff --git a/src/pipeline.jl b/src/pipeline.jl index 0177e9ec..e02b3478 100644 --- a/src/pipeline.jl +++ b/src/pipeline.jl @@ -49,7 +49,7 @@ RecipesPipeline.splittable_attribute(plt::Plot, key, val::SeriesAnnotations, len RecipesPipeline.splittable_attribute(plt, key, val.strs, len) function RecipesPipeline.split_attribute(plt::Plot, key, val::SeriesAnnotations, indices) - split_strs = RecipesPipeline.split_attribute(key, val.strs, indices) + split_strs = RecipesPipeline.split_attribute(plt, key, val.strs, indices) return SeriesAnnotations(split_strs, val.font, val.baseshape, val.scalefactor) end diff --git a/src/recipes.jl b/src/recipes.jl index 4083289a..7ccaf9c8 100644 --- a/src/recipes.jl +++ b/src/recipes.jl @@ -280,7 +280,7 @@ end end fillrange := nothing seriestype := :path - if plotattributes[:linecolor] == :auto && plotattributes[:marker_z] !== nothing && plotattributes[:line_z] == nothing + if plotattributes[:linecolor] == :auto && plotattributes[:marker_z] !== nothing && plotattributes[:line_z] === nothing line_z := plotattributes[:marker_z] end @@ -933,7 +933,7 @@ end @recipe function f(::Type{Val{:mesh3d}}, x, y, z) # As long as no i,j,k are supplied this should work with PyPlot and GR seriestype := :surface - if plotattributes[:connections] != nothing + if plotattributes[:connections] !== nothing throw(ArgumentError("Giving triangles using the connections argument is only supported on Plotly backend.")) end () @@ -1496,7 +1496,7 @@ end end -Plots.findnz(A::AbstractSparseMatrix) = findnz(A) +Plots.findnz(A::AbstractSparseMatrix) = SparseArrays.findnz(A) # fallback function for finding non-zero elements of non-sparse matrices function Plots.findnz(A::AbstractMatrix) diff --git a/src/shorthands.jl b/src/shorthands.jl index 89ac4e80..2931162c 100644 --- a/src/shorthands.jl +++ b/src/shorthands.jl @@ -432,10 +432,10 @@ zlims!(zmin::Real, zmax::Real; kw...) = plot!(; zlims = (zmi "Set xticks for an existing plot" -xticks!(v::TicksArgs; kw...) where {T<:Real} = plot!(; xticks = v, kw...) +xticks!(v::TicksArgs; kw...) = plot!(; xticks = v, kw...) "Set yticks for an existing plot" -yticks!(v::TicksArgs; kw...) where {T<:Real} = plot!(; yticks = v, kw...) +yticks!(v::TicksArgs; kw...) = plot!(; yticks = v, kw...) xticks!( ticks::AVec{T}, labels::AVec{S}; kw...) where {T<:Real,S<:AbstractString} = plot!(; xticks = (ticks,labels), kw...) diff --git a/src/utils.jl b/src/utils.jl index 1a1f81a1..af4bcaa0 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -207,9 +207,6 @@ end createSegments(z) = collect(repeat(reshape(z,1,:),2,1))[2:end] -Base.first(c::Colorant) = c -Base.first(x::Symbol) = x - sortedkeys(plotattributes::Dict) = sort(collect(keys(plotattributes))) @@ -295,13 +292,6 @@ limsType(lims::Tuple{T,S}) where {T<:Real,S<:Real} = :limits limsType(lims::Symbol) = lims == :auto ? :auto : :invalid limsType(lims) = :invalid -# axis_Symbol(letter, postfix) = Symbol(letter * postfix) -# axis_symbols(letter, postfix...) = map(s -> axis_Symbol(letter, s), postfix) - -Base.convert(::Type{Vector{T}}, rng::AbstractRange{T}) where {T<:Real} = T[x for x in rng] -Base.convert(::Type{Vector{T}}, rng::AbstractRange{S}) where {T<:Real,S<:Real} = T[x for x in rng] - -Base.merge(a::AbstractVector, b::AbstractVector) = sort(unique(vcat(a,b))) # recursively merge kw-dicts, e.g. for merging extra_kwargs / extra_plot_kwargs in plotly) recursive_merge(x::AbstractDict...) = merge(recursive_merge, x...)