|
| 1 | +## Atributos {#sec:datavisMakie_attributes} |
| 2 | + |
| 3 | +Um gráfico personalizado pode ser criado usando `attributes` (atributos). |
| 4 | +Os atributos podem ser definidos através de argumentos de palavras-chave. |
| 5 | +Uma lista de `atributos` para cada objeto de plotagem pode ser visualizada via: |
| 6 | + |
| 7 | +```jl |
| 8 | +s = """ |
| 9 | + CairoMakie.activate!() # hide |
| 10 | + fig, ax, pltobj = scatterlines(1:10) |
| 11 | + pltobj.attributes |
| 12 | + """ |
| 13 | +sco(s) |
| 14 | +``` |
| 15 | + |
| 16 | +Ou como uma chamada de dicionário (`Dict`), `pltobject.attributes.attributes`. |
| 17 | + |
| 18 | +Pedir ajuda no `REPL` como `?lines` ou `help(lines)` para qualquer função de plotagem mostrará seus atributos correspondentes acrescidos de uma breve descrição de como usar essa função específica. |
| 19 | +Por exemplo, para `lines`: |
| 20 | + |
| 21 | +```jl |
| 22 | +s = """ |
| 23 | + help(lines) |
| 24 | + """ |
| 25 | +sco(s) |
| 26 | +``` |
| 27 | + |
| 28 | +Não apenas os objetos de tipo _plot_ têm atributos, como também os objetos `Axis` (eixo) e `Figure` (figura) os possuem. |
| 29 | +Por exemplo, para figura, temos `backgroundcolor` (cor de fundo), `resolution` (resolução), `font` (fonte) e `fontsize` (tamanho da fonte) e o `figure_padding` (preenchimento ou passe-partout) que altera a quantidade de espaço ao redor do conteúdo da figura, veja a área cinza no _plot_, Figure (@ fig:custom_plot). |
| 30 | +Ele aceita como argumentos um número único para todos os lados, ou uma tupla de quatro números para esquerda, direita, inferior e superior, representando cada um dos lados. |
| 31 | + |
| 32 | +`Axis` tem muito mais atributos, alguns deles são `backgroundcolor` (cor de fundo), `xgridcolor` (cor da grade do eixo x) e `title` (título). |
| 33 | +Para uma lista completa basta digitar `help(Axis)`. |
| 34 | + |
| 35 | +Assim, para nosso próximo plot, designaremos vários atributos de uma só vez, como segue: |
| 36 | + |
| 37 | +```jl |
| 38 | +s = """ |
| 39 | + CairoMakie.activate!() # hide |
| 40 | + lines(1:10, (1:10).^2; color=:black, linewidth=2, linestyle=:dash, |
| 41 | + figure=(; figure_padding=5, resolution=(600, 400), font="sans", |
| 42 | + backgroundcolor=:grey90, fontsize=16), |
| 43 | + axis=(; xlabel="x", ylabel="x²", title="title", |
| 44 | + xgridstyle=:dash, ygridstyle=:dash)) |
| 45 | + current_figure() |
| 46 | + filename = "custom_plot" # hide |
| 47 | + link_attributes = "width=60%" # hide |
| 48 | + caption = "Custom plot." # hide |
| 49 | + Options(current_figure(); filename, caption, label=filename, link_attributes) # hide |
| 50 | + """ |
| 51 | +sco(s) |
| 52 | +``` |
| 53 | + |
| 54 | +Este exemplo já possui a maioria dos atributos que grande parte dos usuários normalmente executará. |
| 55 | +Provavelmente, também seria bom ter uma `legend` (legenda). |
| 56 | +O que fará mais sentido quando utilizarmos mais de uma função de visualização. |
| 57 | +Então, vamos `append` (acrescentar) outra mutação em nosso `plot object` e adicionar as legendas correspondentes chamando `axislegend`. |
| 58 | +A legenda criada irá coletar todos os `labels` que você pode ter passado para suas funções de plotagem e por padrão estará localizada na posição superior direita. |
| 59 | +Para uma posição diferente, o argumento `position=:ct` é chamado, onde `:ct` significa que vamos colocar nosso rótulo no 'centro' e no 'topo', veja Figura @fig:custom_plot_leg: |
| 60 | + |
| 61 | +```jl |
| 62 | +s = """ |
| 63 | + CairoMakie.activate!() # hide |
| 64 | + lines(1:10, (1:10).^2; label="x²", linewidth=2, linestyle=nothing, |
| 65 | + figure=(; figure_padding=5, resolution=(600, 400), font="sans", |
| 66 | + backgroundcolor=:grey90, fontsize=16), |
| 67 | + axis=(; xlabel="x", title="title", xgridstyle=:dash, |
| 68 | + ygridstyle=:dash)) |
| 69 | + scatterlines!(1:10, (10:-1:1).^2; label="Reverse(x)²") |
| 70 | + axislegend("legend"; position=:ct) |
| 71 | + current_figure() |
| 72 | + label = "custom_plot_leg" # hide |
| 73 | + link_attributes = "width=60%" # hide |
| 74 | + caption = "Custom plot legend." # hide |
| 75 | + Options(current_figure(); label, filename=label, caption, link_attributes) # hide |
| 76 | + """ |
| 77 | +sco(s) |
| 78 | +``` |
| 79 | + |
| 80 | +Outras posições também estão disponíveis ao combinarmos `left(l), center(c), right(r)` com `bottom(b), center(c), top(t)`. |
| 81 | +Por exemplo, para o topo superior esquerdo, use `:lt`. |
| 82 | + |
| 83 | +No entanto, escrever essa quantidade de código apenas para duas linhas é complicado. |
| 84 | +Portanto, se você planeja fazer muitos _plots_ com a mesma estética geral, definir um tema é sempre melhor. |
| 85 | +Podemos fazer isso com `set_theme!()` como ilustrado pelo exemplo abaixo. |
| 86 | + |
| 87 | +A plotagem da figura anterior deve ter as novas configurações padrão definidas por `set_theme!(kwargs)`: |
| 88 | + |
| 89 | +```jl |
| 90 | +s = """ |
| 91 | + CairoMakie.activate!() # hide |
| 92 | + set_theme!(; resolution=(600, 400), |
| 93 | + backgroundcolor=(:orange, 0.5), fontsize=16, font="sans", |
| 94 | + Axis=(backgroundcolor=:grey90, xgridstyle=:dash, ygridstyle=:dash), |
| 95 | + Legend=(bgcolor=(:red, 0.2), framecolor=:dodgerblue)) |
| 96 | + lines(1:10, (1:10).^2; label="x²", linewidth=2, linestyle=nothing, |
| 97 | + axis=(; xlabel="x", title="title")) |
| 98 | + scatterlines!(1:10, (10:-1:1).^2; label="Reverse(x)²") |
| 99 | + axislegend("legend"; position=:ct) |
| 100 | + current_figure() |
| 101 | + set_theme!() |
| 102 | + label = "setTheme" # hide |
| 103 | + link_attributes = "width=60%" # hide |
| 104 | + caption = "Set theme example." |
| 105 | + Options(current_figure(); filename=label, caption, label, link_attributes) # hide |
| 106 | + """ |
| 107 | +sco(s) |
| 108 | +``` |
| 109 | + |
| 110 | +Perceba que a última linha é `set_theme!()`, que irá redefinir as configurações padrão do Makie. |
| 111 | +Para mais `themes` por favor vá a @sec:themes. |
| 112 | + |
| 113 | +Antes de passarmos para a próxima seção, vale a pena ver um exemplo onde um `array` de atributos é passado de uma só vez para uma função de plotagem. |
| 114 | +Para esse exemplo, usaremos a função de plotagem `scatter` para fazer um gráfico de dispersão. |
| 115 | + |
| 116 | +Os dados para isso podem ser um `array` com 100 linhas e 3 colunas, aqui gerados aleatoriamente a partir de uma distribuição normal. |
| 117 | +Aqui, a primeira coluna pode ser as posições no eixo `x`, a segunda as posições em `y` e a terceira um valor associado intrínseco para cada ponto. |
| 118 | +O último pode ser representado em um gráfico por uma 'cor' diferente ou com um tamanho de marcador diferente. Em um gráfico de dispersão podemos fazer os dois. |
| 119 | + |
| 120 | +```jl |
| 121 | +s = """ |
| 122 | + using Random: seed! |
| 123 | + seed!(28) |
| 124 | + xyvals = randn(100, 3) |
| 125 | + xyvals[1:5, :] |
| 126 | + """ |
| 127 | +sco(s) |
| 128 | +``` |
| 129 | + |
| 130 | +A seguir, o _plot_ correspondente pode ser visto em @fig:bubble: |
| 131 | + |
| 132 | +```jl |
| 133 | +s = """ |
| 134 | + CairoMakie.activate!() # hide |
| 135 | + fig, ax, pltobj = scatter(xyvals[:, 1], xyvals[:, 2]; color=xyvals[:, 3], |
| 136 | + label="Bubbles", colormap=:plasma, markersize=15 * abs.(xyvals[:, 3]), |
| 137 | + figure=(; resolution=(600, 400)), axis=(; aspect=DataAspect())) |
| 138 | + limits!(-3, 3, -3, 3) |
| 139 | + Legend(fig[1, 2], ax, valign=:top) |
| 140 | + Colorbar(fig[1, 2], pltobj, height=Relative(3 / 4)) |
| 141 | + fig |
| 142 | + label = "bubble" # hide |
| 143 | + link_attributes = "width=60%" # hide |
| 144 | + caption = "Bubble plot." |
| 145 | + Options(current_figure(); filename=label, caption, label, link_attributes) # hide |
| 146 | + """ |
| 147 | +sco(s) |
| 148 | +``` |
| 149 | + |
| 150 | +onde decompomos a tupla `FigureAxisPlot` em `fig, ax, pltobj`, para podermos adicionar um `Legend` e `Colorbar` fora do objeto plotado. |
| 151 | +Vamos discutir opções de _layout_ mais detalhadamente em in @sec:makie_layouts. |
| 152 | + |
| 153 | +Fizemos alguns exemplos básicos, mas ainda interessantes, para mostrar como usar o `Makie.jl` e agora você deve estar se perguntando: o que mais podemos fazer? |
| 154 | +Quais são todas as possíveis funções de plotagem disponíveis em `Makie.jl`? |
| 155 | +Para responder essa pergunta, contamos com uma _cheat sheet_ em @fig:cheat_sheet_cairomakie. |
| 156 | +Isso funciona especialmente bem com o _backend_ `CairoMakie.jl`. |
| 157 | + |
| 158 | +{#fig:cheat_sheet_cairomakie} |
| 159 | + |
| 160 | +Para completar, em @fig:cheat_sheet_glmakie, mostramos as funções correspondentes _cheat sheet_ para `GLMakie.jl`, que dão suporte principalmente para plotagens 3D. |
| 161 | +Elas serão explicadas em detalhes em @sec:glmakie. |
| 162 | + |
| 163 | +{#fig:cheat_sheet_glmakie} |
| 164 | + |
| 165 | +Agora que temos uma ideia de todas as coisas que podemos fazer, vamos voltar e continuar com o básico. |
| 166 | +É hora de aprendermos a mudar a aparência geral dos nossos _plots_. |
0 commit comments