142 lines
3.4 KiB
Julia
142 lines
3.4 KiB
Julia
"""
|
|
theme(s::Symbol)
|
|
|
|
Specify the colour theme for plots.
|
|
"""
|
|
function theme(s::Symbol; kw...)
|
|
defaults = copy(PlotThemes._themes[s].defaults)
|
|
_theme(s, defaults; kw...)
|
|
end
|
|
|
|
function _theme(s::Symbol, defaults::AKW; kw...)
|
|
# Reset to defaults to overwrite active theme
|
|
reset_defaults()
|
|
|
|
# Set the theme's gradient as default
|
|
if haskey(defaults, :colorgradient)
|
|
PlotUtils.default_cgrad(pop!(defaults, :colorgradient))
|
|
else
|
|
PlotUtils.default_cgrad(:default)
|
|
end
|
|
|
|
# maybe overwrite the theme's gradient
|
|
kw = KW(kw)
|
|
if haskey(kw, :colorgradient)
|
|
PlotUtils.default_cgrad(pop!(kw, :colorgradient))
|
|
end
|
|
|
|
# Set the theme's defaults
|
|
default(; defaults..., kw...)
|
|
return
|
|
end
|
|
|
|
@deprecate set_theme(s) theme(s)
|
|
|
|
@userplot ShowTheme
|
|
|
|
_color_functions = KW(
|
|
:protanopic => protanopic,
|
|
:deuteranopic => deuteranopic,
|
|
:tritanopic => tritanopic,
|
|
)
|
|
_get_showtheme_args(thm::Symbol) = thm, identity
|
|
_get_showtheme_args(thm::Symbol, func::Symbol) = thm, get(_color_functions, func, identity)
|
|
|
|
@recipe function showtheme(st::ShowTheme)
|
|
thm, cfunc = _get_showtheme_args(st.args...)
|
|
defaults = PlotThemes._themes[thm].defaults
|
|
|
|
# get the gradient
|
|
gradient_colors = color_list(cgrad(get(defaults, :colorgradient, :default)))
|
|
colorgradient = cgrad(cfunc.(RGB.(gradient_colors)))
|
|
|
|
# get the palette
|
|
cp = color_list(palette(get(defaults, :palette, :default)))
|
|
cp = cfunc.(RGB.(cp))
|
|
|
|
# apply the theme
|
|
for k in keys(defaults)
|
|
k in (:colorgradient, :palette) && continue
|
|
def = defaults[k]
|
|
arg = get(_keyAliases, k, k)
|
|
plotattributes[arg] = if typeof(def) <: Colorant
|
|
cfunc(RGB(def))
|
|
elseif eltype(def) <: Colorant
|
|
cfunc.(RGB.(def))
|
|
elseif occursin("color", string(arg))
|
|
cfunc.(RGB.(plot_color.(def)))
|
|
else
|
|
def
|
|
end
|
|
end
|
|
|
|
Random.seed!(1)
|
|
|
|
label := ""
|
|
colorbar := false
|
|
layout := (2, 3)
|
|
|
|
for j in 1:4
|
|
@series begin
|
|
subplot := 1
|
|
color_palette := cp
|
|
seriestype := :path
|
|
cumsum(randn(50))
|
|
end
|
|
|
|
@series begin
|
|
subplot := 2
|
|
seriestype := :scatter
|
|
color_palette := cp
|
|
marker := (:circle, :diamond, :star5, :square)[j]
|
|
randn(10), randn(10)
|
|
end
|
|
end
|
|
|
|
@series begin
|
|
subplot := 3
|
|
seriestype := :histogram
|
|
color_palette := cp
|
|
randn(1000) .+ (0:2:4)'
|
|
end
|
|
|
|
f(r) = sin(r) / r
|
|
_norm(x, y) = norm([x, y])
|
|
x = y = range(-3π, stop = 3π, length = 30)
|
|
z = f.(_norm.(x, y'))
|
|
wi = 2:3:30
|
|
|
|
@series begin
|
|
subplot := 4
|
|
seriestype := :heatmap
|
|
seriescolor := colorgradient
|
|
xticks := (-2π:2π:2π, string.(-2:2:2, "π"))
|
|
yticks := (-2π:2π:2π, string.(-2:2:2, "π"))
|
|
x, y, z
|
|
end
|
|
|
|
@series begin
|
|
subplot := 5
|
|
seriestype := :surface
|
|
seriescolor := colorgradient
|
|
xticks := (-2π:2π:2π, string.(-2:2:2, "π"))
|
|
yticks := (-2π:2π:2π, string.(-2:2:2, "π"))
|
|
x, y, z
|
|
end
|
|
|
|
n = 100
|
|
ts = range(0, stop = 10π, length = n)
|
|
x = (0.1ts) .* cos.(ts)
|
|
y = (0.1ts) .* sin.(ts)
|
|
z = 1:n
|
|
|
|
@series begin
|
|
subplot := 6
|
|
seriescolor := colorgradient
|
|
linewidth := 3
|
|
line_z := z
|
|
x, y, z
|
|
end
|
|
|
|
end
|