Skip to content
This repository was archived by the owner on Jun 21, 2025. It is now read-only.

Commit 6463654

Browse files
storopoliNMLebedevh-pgyElias-Noda
authored
[PT] data_vis_makie_pt (#9)
* added pt markdown files for data_vis_makie chapter * updated config.toml * Update data_vis_makie_pt.md * Update data_vis_makie_cairo_pt.md * Update data_vis_makie_attributes_pt.md * normalized back-end to backend and italized english words * Revisão cairomakie * correção do atributes * Revisão Técnica - Henrique Pougy 19. GPU powered - o sentido aqui é que a GPU que suporta a renderização dos grá> 33. Sugestão. Plots = gráficos * Revisão Técnica - Henrique Pougy 3. Scatter plot = gráfico de dispersão. 3. Observações conectadas por linhas. 22. Plot = gráfico. Sugestão de redação. 24. Sugestão de redação, para ficar claro que são 3 objetos dentro de uma collection. 26. Plot italicizado, pois se refere ao nome do objeto. Sugestão de redação com tradução dos nomes dos outros objetos. 29. Sugestão de redação. * Revisão Técnica Henrique Pougy 3. Plot = gráfico. Sugestão: traduzir attributes. 16. Dict calling = chamada de dicionário. 18. Sugestão de redação. 28. Plot objects = objetos de tipo plot, italicizado. Sugestão de redação. 29. Traduzindo nomes dos atributos. 30. Sugestão de redação. 32. Sugestão de redação. Traduzindo nomes dos atritubos. 35. Sugestão de redação 55. Traduzindo nome do atributo. Sugestão de redação. 56. Sugestão de redação. 57. Sugestão de redação, tradução do método append. 59. Sugestão de redação, para deixar mais claro que o que está mudando é a posição da legenda. ---- Tradução ainda não finalizada, parei na linha 59. * Update data_vis_makie_attributes_pt.md * Update data_vis_makie_attributes_pt.md * Update data_vis_makie_themes_pt.md * Update data_vis_makie_latex_pt.md * Update data_vis_makie_colors_pt.md * Update data_vis_makie_layouts_pt.md * Update data_vis_makie_layouts_pt.md * Update data_vis_makie_layouts_pt.md * Update data_vis_makie_layouts_pt.md * Update data_vis_makie_layouts_pt.md * Update data_vis_makie_layouts_pt.md * Update data_vis_makie_glmakie_pt.md * revisado data_vis_makie_attributes_pt.md * Revisão - Elias 15 - Italizando "backend" 32 - Italizando "plots" * Revisão - Elias 26 - Erro de digitação, eix = eixo * Revisão - Elias 29 - Italizando "plot" 84 - Italizando "plots" 130 - Italizando "plot" 151 - Italizando "layout" 156 - Erro de digitação, especialemnte = especialmente; e também italizando "backend" 160 - Erro de coesão, se é "elas", então elas "dão suporte" 166 - Italizando "plots" * Update data_vis_makie_glmakie_pt.md * Update data_vis_makie_themes_pt.md * Apply suggestions from code review * Update data_vis_makie_latex_pt.md * Update data_vis_makie_colors_pt.md * Update data_vis_makie_colors_pt.md * Update data_vis_makie_layouts_pt.md * Update data_vis_makie_glmakie_pt.md Co-authored-by: NMLebedev <[email protected]> Co-authored-by: h-pgy <[email protected]> Co-authored-by: Elias-Noda <[email protected]>
1 parent 529d615 commit 6463654

9 files changed

+961
-8
lines changed

config.toml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,14 @@
5353
"dataframes_transform_pt",
5454
"dataframes_groupby_combine_pt",
5555
"dataframes_performance_pt",
56-
"data_vis_makie",
57-
"data_vis_makie_cairo",
58-
"data_vis_makie_attributes",
59-
"data_vis_makie_themes",
60-
"data_vis_makie_latex",
61-
"data_vis_makie_colors",
62-
"data_vis_makie_layouts",
63-
"data_vis_makie_glmakie",
56+
"data_vis_makie_pt",
57+
"data_vis_makie_cairo_pt",
58+
"data_vis_makie_attributes_pt",
59+
"data_vis_makie_themes_pt",
60+
"data_vis_makie_latex_pt",
61+
"data_vis_makie_colors_pt",
62+
"data_vis_makie_layouts_pt",
63+
"data_vis_makie_glmakie_pt",
6464
#"stats",
6565
#"stats_distributions",
6666
#"stats_vis",
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
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+
![Funções de plotagem: Cheat Sheet. Saída dada por Cairomakie.](images/makiePlottingFunctionsHide.png){#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+
![Funções de plotagem: Cheat Sheet. Saída dada por GLMakie.](images/GLMakiePlottingFunctionsHide.png){#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_.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
## CairoMakie.jl {#sec:cairomakie}
2+
3+
Vamos começar com nosso primeiro _plot_, um gráfico de dispersão com algumas observações conectadas por linhas:
4+
5+
```
6+
using CairoMakie
7+
CairoMakie.activate!()
8+
```
9+
10+
```jl
11+
s = """
12+
CairoMakie.activate!() # hide
13+
fig = scatterlines(1:10, 1:10)
14+
label = "firstplot" # hide
15+
caption = "First plot." # hide
16+
link_attributes = "width=60%" # hide
17+
Options(fig; filename=label, caption, label, link_attributes) # hide
18+
"""
19+
sco(s)
20+
```
21+
22+
Observe que o gráfico anterior é a saída padrão, que provavelmente precisaremos ajustar usando nomes de eixo e rótulos.
23+
24+
Observe também que toda função de plotagem como `scatterlines` cria e retorna novos objetos do tipo `Figure`, `Axis` e `plot` dentro de uma coleção chamada `FigureAxisPlot`.
25+
Estes são conhecidos como os métodos _non-mutating_ (imutáveis).
26+
Por outro lado, os métodos _mutating_ (mutáveis, por exemplo, `scatterlines!`, observe o `!`) apenas retornam um objeto do tipo _plot_ que pode ser anexado a um determinado `axis` (eixo) ou à `current_figure()` (figura atual).
27+
28+
A próxima pergunta que se pode ter é: como mudo a cor ou o tipo de marcador?
29+
Isso pode ser feito por meio de `attributes` (atributos), o que faremos na próxima seção.
Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
## Cores e mapas de cores {#sec:makie_colors}
2+
3+
Escolher um conjunto apropriado de cores ou barra de cores para sua plotagem é uma parte essencial para apresentação de resultados.
4+
[Colors.jl](https://github.com/JuliaGraphics/Colors.jl) é suportado em `Makie.jl`
5+
para que você possa usar [cores nomeadas](https://juliagraphics.github.io/Colors.jl/latest/namedcolors/) ou passar valores `RGB` ou `RGBA`.
6+
Além disso, os mapas de cores [ColorSchemes.jl](https://github.com/JuliaGraphics/ColorSchemes.jl) e [PerceptualColourMaps.jl](https://github.com/peterkovesi/PerceptualColourMaps.jl) também podem ser usados.
7+
Vale a pena saber que você pode reverter um mapa de cores fazendo `Reverse(:colormap_name)`
8+
para obter uma cor transparente ou mapa de cores com `color=(:red,0.5)` e `colormap=(:viridis, 0.5)`.
9+
10+
Diferentes casos de uso serão mostrados a seguir.
11+
Então vamos definir um tema personalizado com novas cores e uma paleta de cores.
12+
13+
Por padrão `Makie.jl` tem um conjunto predefinido de cores para percorrê-las automaticamente.
14+
Conforme mostrado nas figuras anteriores, onde nenhuma cor específica foi definida.
15+
A substituição desses padrões é feita chamando a palavra-chave `color` na função de plotagem e especificando uma nova cor por meio de um `Symbol` ou `String`.
16+
Veja isso em ação no exemplo a seguir:
17+
18+
```jl
19+
@sco JDS.set_colors_and_cycle()
20+
```
21+
22+
Onde, nas duas primeiras linhas, usamos a palavra-chave `color` para especificar nossa cor.
23+
O resto está usando o padrão do conjunto de cores do ciclo.
24+
Mais tarde, aprenderemos como fazer um ciclo personalizado.
25+
26+
Em relação aos mapas de cores, já estamos familiarizados com a palavra-chave `colormap` para `heatmap`s e `scatter`s.
27+
Aqui, mostramos que um mapa de cores também pode ser especificado por meio de um `Symbol` ou uma `String`, semelhante a cores.
28+
Ou até mesmo um vetor de cores `RGB`.
29+
Vamos fazer nosso primeiro exemplo chamando mapas de cores como `Symbol`, `String` e `cgrad` para valores categóricos.
30+
Cheque `?cgrad` para mais informações.
31+
32+
```jl
33+
scolor = """
34+
CairoMakie.activate!() # hide
35+
figure = (; resolution=(600, 400), font="CMU Serif")
36+
axis = (; xlabel=L"x", ylabel=L"y", aspect=DataAspect())
37+
fig, ax, pltobj = heatmap(rand(20, 20); colorrange=(0, 1),
38+
colormap=Reverse(:viridis), axis=axis, figure=figure)
39+
Colorbar(fig[1, 2], pltobj, label = "Reverse colormap Sequential")
40+
fig
41+
label = "Reverse_colormap_sequential" # hide
42+
caption = "Reverse colormap sequential and colorrange." # hide
43+
link_attributes = "width=60%" # hide
44+
Options(fig; filename=label, label, caption, link_attributes) # hide
45+
"""
46+
sco(scolor)
47+
```
48+
49+
Ao definir um `colorrange` geralmente os valores fora deste intervalo são coloridos com a primeira e a última cor do mapa de cores.
50+
No entanto, às vezes é melhor especificar a cor desejada em ambas as extremidades.
51+
Fazemos isso com `highclip` e `lowclip`:
52+
53+
```
54+
using ColorSchemes
55+
```
56+
57+
```jl
58+
s = """
59+
CairoMakie.activate!() # hide
60+
figure = (; resolution=(600, 400), font="CMU Serif")
61+
axis = (; xlabel=L"x", ylabel=L"y", aspect=DataAspect())
62+
fig, ax, pltobj=heatmap(randn(20, 20); colorrange=(-2, 2),
63+
colormap="diverging_rainbow_bgymr_45_85_c67_n256",
64+
highclip=:black, lowclip=:white, axis=axis, figure=figure)
65+
Colorbar(fig[1, 2], pltobj, label = "Diverging colormap")
66+
fig
67+
label = "diverging_colormap" # hide
68+
caption = "Diverging Colormap with low and high clip." # hide
69+
link_attributes = "width=60%" # hide
70+
Options(fig; filename=label, label, caption, link_attributes) # hide
71+
"""
72+
sco(s)
73+
```
74+
75+
Mas mencionamos que também vetores `RGB` são opções válidas.
76+
Para o nosso próximo exemplo, você pode passar o mapa de cores personalizado _perse_ ou usar `cgrad` para forçar um `Colorbar` categórico.
77+
78+
```
79+
using Colors, ColorSchemes
80+
```
81+
82+
```jl
83+
scat = """
84+
CairoMakie.activate!() # hide
85+
figure = (; resolution=(600, 400), font="CMU Serif")
86+
axis = (; xlabel=L"x", ylabel=L"y", aspect=DataAspect())
87+
cmap = ColorScheme(range(colorant"red", colorant"green", length=3))
88+
mygrays = ColorScheme([RGB{Float64}(i, i, i) for i in [0.0, 0.5, 1.0]])
89+
fig, ax, pltobj = heatmap(rand(-1:1, 20, 20);
90+
colormap=cgrad(mygrays, 3, categorical=true, rev=true), # cgrad and Symbol, mygrays,
91+
axis=axis, figure=figure)
92+
cbar = Colorbar(fig[1, 2], pltobj, label="Categories")
93+
cbar.ticks = ([-0.66, 0, 0.66], ["-1", "0", "1"])
94+
fig
95+
label = "categorical_colormap" # hide
96+
caption = "Categorical Colormap." # hide
97+
link_attributes = "width=60%" # hide
98+
Options(fig; filename=label, label, caption, link_attributes) # hide
99+
"""
100+
sco(scat)
101+
```
102+
103+
Por fim, os tiques na barra de cores para o caso categorial não são centralizados por padrão em cada cor.
104+
Isso é corrigido passando ticks personalizados, como em `cbar.ticks = (positions, ticks)`.
105+
A última situação é passar uma tupla de duas cores para o `colormap` como símbolos, strings ou uma mistura.
106+
Você obterá um mapa de cores interpolado entre essas duas cores.
107+
108+
Além disso, cores codificadas em hexadecimal também são aceitas.
109+
Então, no topo do nosso mapa de calor, vamos colocar um ponto semitransparente usando:
110+
111+
```jl
112+
s2color2 = """
113+
CairoMakie.activate!() # hide
114+
figure = (; resolution=(600, 400), font="CMU Serif")
115+
axis = (; xlabel=L"x", ylabel=L"y", aspect=DataAspect())
116+
fig, ax, pltobj = heatmap(rand(20, 20); colorrange=(0, 1),
117+
colormap=(:red, "black"), axis=axis, figure=figure)
118+
scatter!(ax, [11], [11], color=("#C0C0C0", 0.5), markersize=150)
119+
Colorbar(fig[1, 2], pltobj, label="2 colors")
120+
fig
121+
label = "colormap_two_colors" # hide
122+
caption = "Colormap from two colors." # hide
123+
link_attributes = "width=60%" # hide
124+
Options(fig; filename=label, label, caption, link_attributes) # hide
125+
"""
126+
sco(s2color2)
127+
```
128+
129+
### Ciclo personalizado
130+
131+
Aqui, poderíamos definir um `Tema` global com um novo ciclo de cores, mas essa **não é a maneira recomendada** de fazer isso.
132+
É melhor definir um novo tema e usar como mostramos antes.
133+
Vamos definir um novo com um `cycle` para `:color`, `:linestyle`, `:marker` e um novo padrão `colormap`.
134+
Vamos adicionar esses novos atributos ao nosso `publication_theme` anterior.
135+
136+
```jl
137+
@sc new_cycle_theme()
138+
```
139+
140+
E aplique-o a uma função de plotagem como a seguinte:
141+
142+
```jl
143+
@sc scatters_and_lines()
144+
```
145+
146+
```jl
147+
s = """
148+
CairoMakie.activate!() # hide
149+
with_theme(scatters_and_lines, new_cycle_theme())
150+
label = "custom_cycle" # hide
151+
caption = "Custom theme with new cycle and colormap." # hide
152+
link_attributes = "width=60%" # hide
153+
Options(current_figure(); filename=label, caption, label, link_attributes) # hide
154+
"""
155+
sco(s)
156+
```
157+
158+
Neste ponto, você deve ter **controle completo** sobre suas cores, estilos de linha, marcadores e mapas de cores para seus _plots_.
159+
A seguir, veremos como gerenciar e controlar **_layouts_**.

0 commit comments

Comments
 (0)