5.3 Temas

Existem várias maneiras de modificar a aparência geral de seus plots. Você pode usar um tema predefinido ou seu próprio tema personalizado. Por exemplo, use um tema escuro predefinido via with_theme(your_plot_function, theme_dark()). Ou construa o seu próprio com Theme(kwargs) ou até mesmo atualize o que está ativo com update_theme!(kwargs).

Você também pode fazer set_theme!(theme; kwargs...) para alterar o tema do padrão atual para theme e substituir ou adicionar atributos fornecidos por kwargs. Se você fizer isso e quiser redefinir todas as configurações anteriores, faça set_theme!() sem argumentos. Veja os exemplos a seguir, onde preparamos uma função de plotagem de teste com características diferentes, de forma que a maioria dos atributos para cada tema possa ser apreciada.

using Random: seed!
seed!(123)
y = cumsum(randn(6, 6), dims=2)
6×6 Matrix{Float64}:
  0.808288   0.386519   0.355371   0.0365011  -0.0911358   1.8115
 -1.12207   -2.47766   -2.16183   -2.49928    -2.02981    -1.37017
 -1.10464   -1.03518   -3.19756   -1.18944    -2.71633    -3.80455
 -0.416993  -0.534315  -1.42439   -0.659362   -0.0592298   0.644529
  0.287588   1.50687    2.36111    2.54137     0.48751     0.630836
  0.229819   0.522733   0.864515   2.89343     2.06537     2.21375

Uma matrix de tamanho (20, 20) com entradas aleatórias, para que possamos plotar um mapa de calor. O intervalo em \(x\) e \(y\) também é especificado.

using Random: seed!
seed!(13)
xv = yv = LinRange(-3, 0.5, 20)
matrix = randn(20, 20)
matrix[1:6, 1:6] # first 6 rows and columns
6×6 Matrix{Float64}:
 -0.271257   0.894952   0.728865  -0.293849   -0.449277   -0.0948871
 -0.193033  -0.421286  -0.455905  -0.0576092  -0.756621   -1.47419
 -0.123177   0.762254   0.773921  -0.38526    -0.0659695  -0.599284
 -1.47327    0.770122   1.20725    0.257913    0.111979    0.875439
 -1.82913   -0.603888   0.164083  -0.118504    1.46723     0.0948876
  1.09769    0.178207   0.110243  -0.543203    0.592245    0.328993

Portanto, nossa função de plotagem se parece com o seguinte:

function demo_themes(y, xv, yv, matrix)
    fig, _ = series(y; labels=["$i" for i = 1:6], markersize=10,
        color=:Set1, figure=(; resolution=(600, 300)),
        axis=(; xlabel="time (s)", ylabel="Amplitude",
            title="Measurements"))
    hmap = heatmap!(xv, yv, matrix; colormap=:plasma)
    limits!(-3.1, 8.5, -6, 5.1)
    axislegend("legend"; merge=true)
    Colorbar(fig[1, 2], hmap)
    fig
end

Observe que a função series foi usada para plotar várias linhas e dispersões de uma só vez com seus rótulos correspondentes. Além disso, um mapa de calor com sua barra de cores foi incluído. Atualmente, existem dois temas escuros, um chamado theme_dark() e outro theme_black():

with_theme(theme_dark()) do
    demo_themes(y, xv, yv, matrix)
end
with_theme(theme_black()) do
    demo_themes(y, xv, yv, matrix)
end
Figure 11: Theme dark.
Figure 12: Theme black.

E mais três temas claros chamados, theme_ggplot2(), theme_minimal() e theme_light(). Útil para plots de tipo de publicação mais padrão.

with_theme(theme_ggplot2()) do
    demo_themes(y, xv, yv, matrix)
end
with_theme(theme_minimal()) do
    demo_themes(y, xv, yv, matrix)
end
with_theme(theme_light()) do
    demo_themes(y, xv, yv, matrix)
end
Figure 13: Theme ggplot2.
Figure 14: Theme minimal.
Figure 15: Theme light.

Outra alternativa é definir um Theme fazendo with_theme(your_plot, your_theme()). Por exemplo, o tema a seguir pode ser uma versão simples para um modelo de qualidade de publicação:

publication_theme() = Theme(
    fontsize=16, font="CMU Serif",
    Axis=(xlabelsize=20, xgridstyle=:dash, ygridstyle=:dash,
        xtickalign=1, ytickalign=1, yticksize=10, xticksize=10,
        xlabelpadding=-5, xlabel="x", ylabel="y"),
    Legend=(framecolor=(:black, 0.5), bgcolor=(:white, 0.5)),
    Colorbar=(ticksize=16, tickalign=1, spinewidth=0.5),
)

Que, por simplicidade, usamos para plotar scatterlines e um heatmap.

function plot_with_legend_and_colorbar()
    fig, ax, _ = scatterlines(1:10; label="line")
    hm = heatmap!(ax, LinRange(6, 9, 15), LinRange(2, 5, 15), randn(15, 15);
        colormap=:Spectral_11)
    axislegend("legend"; position=:lt)
    Colorbar(fig[1, 2], hm, label="values")
    ax.title = "my custom theme"
    fig
end

Então, usando o Theme definido anteriormente, a saída é mostrada na Figura (Figure 16).

with_theme(plot_with_legend_and_colorbar, publication_theme())
Figure 16: Themed plot with Legend and Colorbar.

Agora, se algo precisar ser alterado após set_theme!(your_theme), podemos fazer isso com update_theme!(resolution=(500, 400), fontsize=18), por exemplo. Outra abordagem será passar argumentos adicionais para a função with_theme:

fig = (resolution=(600, 400), figure_padding=1, backgroundcolor=:grey90)
ax = (; aspect=DataAspect(), xlabel=L"x", ylabel=L"y")
cbar = (; height=Relative(4 / 5))
with_theme(publication_theme(); fig..., Axis=ax, Colorbar=cbar) do
    plot_with_legend_and_colorbar()
end
Figure 17: Theme with extra args.

Agora, vamos seguir em frente e fazer um plot com strings em LaTeX e um tema personalizado.



CC BY-NC-SA 4.0 Jose Storopoli, Rik Huijzer, Lazaro Alonso