-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript_graficos.R
378 lines (315 loc) · 10.8 KB
/
script_graficos.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
# bibliotecas -------------------------------------------------------------
#dados
library(dplyr)
#graficos
library(scales)
library(ggplot2)
library(patchwork)
#
# dados -------------------------------------------------------------------
# diabetes gestacional
d_diab <- readr::read_csv("dados/diabetes.csv")
# pnud
d_pnud <- readxl::read_excel("dados/pnud.xlsx")
# graficos univariados ----------------------------------------------------
# barras
ggplot(d_diab, aes(x = imc_classe, y = after_stat(count)/sum(after_stat(count)))) +
# grafico de barras
geom_bar(color = "blue", fill = "white") +
# eixo y em porcentagem
scale_y_continuous(labels = scales::percent) +
# adiciona rotulos em cima das barras
geom_text(
stat = "count",
aes(label = round(after_stat(count)/sum(after_stat(count)), 1) * 100,
vjust = -1)
) +
# nomes do titulo e eixos x e y
labs(
title = "Frequência do IMC categórico das gestantes",
x = "IMC categórico",
y = "Frequência"
)
# histograma
ggplot(d_diab, aes(x = glicemia_jejum)) +
# histograma
geom_histogram(color = "white", breaks = seq(90, 125, 5)) + #breaks: tamanho do intervalo igual a 5
# nomes do titulo e eixos x e y
labs(
title = "Frequência dos valores do exame de glicemia de jejum",
x = "Glicemia de jejum (em mg/dL)",
y = "Frequência"
) +
# tema (background) do grafico
theme_bw()
# graficos bivariados - qualitativas x qualitativas -----------------------
# barras agrupadas
d_diab |>
# filtra casos diferentes de NA
dplyr::filter(!is.na(cor)) |>
ggplot(aes(x = cor, fill = insulina)) + #fill: preenche as barras por grupo de insulina
# grafico de barras
geom_bar(aes(y = after_stat(count)/sum(after_stat(count))), position = "dodge") +
# eixo y em porcentagem
scale_y_continuous(labels = scales::percent) +
# nomes do titulo, eixos x e y e legenda
labs(
x = "Raça/cor",
y = "Frequência",
fill = "Usou insulina?"
) +
# tema (backgroun) do grafico
theme_bw()
# barras empilhadas (sem rotulos)
d_diab |>
# filtra casos diferentes de NA
dplyr::filter(!is.na(cor)) |>
ggplot(aes(x = cor, fill = insulina)) + #fill: preenche barras por grupo de insulina
# grafico de barras empilhadas em 100%
geom_bar(position = "fill") +
# eixo y em porcentagem
scale_y_continuous(labels = scales::percent) +
# nomes do titulo, eixos x e y e legenda
labs(
x = "Raça/cor",
y = "Frequência",
fill = "Usou insulina?"
) +
# altera cor das barras
scale_fill_brewer(palette = "Accent")
# barras empilhadas (com rotulos)
d_diab |>
dplyr::filter(!is.na(cor)) |>
ggplot(aes(x = cor, fill = insulina)) +
geom_bar(position = "fill") +
scale_y_continuous(labels = scales::percent) +
labs(
x = "Raça/cor",
y = "Frequência",
fill = "Usou insulina?"
) +
scale_fill_brewer(palette = "Accent") -> g #salva grafico num objeto 'g'
g_diab <- g$data |> #acessa os dados
# agrupa os dados por raca/cor e grupo de insulina
dplyr::group_by(cor, insulina) |>
# conta quantos casos de insulina 'sim' e 'nao' tem em cada categoria de raca/cor
dplyr::summarise(n = dplyr::n()) |>
# cria variaveis de proporcao e rotulos
dplyr::mutate(
prop = n / sum(n),
rotulo = scales::percent(prop)
)
g_diab |>
ggplot(aes(x = cor, y = prop, fill = insulina)) + #fill: preenche por grupo de insulina
# grafico de barras empilhadas em 100%
geom_bar(stat = "identity", position = "fill") + #identity: usar as barras para exibir as somas de y
# eixo y em porcentagem
scale_y_continuous(labels = scales::percent) +
# nomes do titulo, eixos x e y e legenda
labs(
x = "Raça/cor",
y = "Frequência",
fill = "Usou insulina?"
) +
# altera cor das barras
scale_fill_brewer(palette = "Accent") +
# adiciona rotulos no meio de cada categoria
geom_text(
aes(label = rotulo), size = 3,
position = position_stack(vjust = .5)
)
# graficos bivariados - quantitativas x quantitativas ---------------------
# dispersao
ggplot(d_diab, aes(x = idade, y = glicemia_jejum)) +
# grafico de pontos
geom_point(size = 2, alpha = .5) +
# adiciona valor da correlacao
ggpubr::stat_cor(
aes(label = after_stat(r.label)), method = "pearson",
label.x = 40, label.y = 120, size = 4.5, color = "red"
) +
# nomes dos eixos x e y
labs(
x = "Idade (em anos)",
y = "Valor do exame de glicemia de jejum (em mg/dL)"
)
# graficos bivariados - qualitativas x quantitativas ----------------------
# linhas
d_pnud |>
# agrupa dados por ano e agregacao
dplyr::group_by(ano, agregacao) |>
# calcula a media da expectativa de vida por agregacao
dplyr::summarise(media_espvida = mean(espvida)) |>
ggplot(aes(x = ano, y = media_espvida, color = agregacao)) + #color: colore as linhas por agregacao
# grafico de linhas
geom_line() +
# grafico de pontos
geom_point() +
# escala de 2012 a 2012 indo de 1 a 1
scale_x_continuous(breaks = seq(2012, 2021, 1)) +
# tema (background) do grafico
theme_bw() +
# nomes dos eixos x e y e legenda
labs(
x = "Ano",
y = "Expectativa de vida média (em anos)",
color = "Agregação"
) +
# legenda embaixo do grafico
theme(legend.position = "bottom")
# boxplot e violino
ggplot(d_diab, aes(x = hb_glicada, y = glicemia_jejum)) +
# grafico de violino
geom_violin(fill = "#add8e6") +
# grafico de boxplot
geom_boxplot(width = .2) +
# nome dos eixos x e y e legenda
labs(
x = "Hemoglobina glicada categórica",
y = "Valor do exame de glicemia de jejum (em mg/dL)",
fill = "Usou insulina?"
) +
# tema (background) do grafico
theme_classic() +
# divide o grafico em funcao da variavel 'insulina' (ou seja, nas categorias 'sim' e 'nao')
facet_wrap(. ~ insulina)
# mapa de calor
d_pnud |>
# filtra casos que se referem aos estados
dplyr::filter(agregacao == "UF") |>
ggplot(aes(x = ano, y = nome, fill = gini)) + #fill: preenche por indice de gini
# mapa de calor
geom_tile() +
# escala de cor viridis
scale_fill_viridis_c() +
# tema (background) do grafico
theme_bw() +
# eixo x na escala de 2012 a 2021 indo de 1 a 1
scale_x_continuous(breaks = seq(2012, 2021, 1), expand = c(0, 0)) + #expand: remove os espacos em branco entre os eixos
# nome dos eixos x e y e legenda
labs(
x = "Ano",
y = "Unidade Federativa (UF)",
fill = "Expectativa \nde vida"
) +
theme(
legend.position = "bottom", #legenda embaixo
legend.key.width = unit(1.5, 'cm') #aumenta a escala da legenda
)
# halteres (dumbell)
d_pnud |>
# filtra casos que se referem às ufs dos anos 2012 e 2019
dplyr::filter(agregacao == "UF" & ano %in% c(2012, 2019)) |>
ggplot(aes(x = espvida, y = reorder(nome, espvida, max))) + #reorder: ornena a uf em forma decrescente
# grafico de pontos
geom_point(aes(color = factor(ano))) + #color: transforma ano em fator e colore os pontos de acordo com os anos
# grafico de linhas
geom_line(aes(group = nome)) + #group: colore por uf
# nomes do titulo, subtitulo e eixos x e y
labs(
title = "Expectativa de vida do brasileiro, por UF",
subtitle = "Entre os anos de 2012 a 2019",
x = "Expectativa de vida (em anos)",
y = "Unidade Federativa (UF)"
) +
# tema (background) do grafico
theme_minimal()
# media com barras de erros (errorbar)
d_diab |>
# agrupa os dados por imc
dplyr::group_by(imc_classe) |>
dplyr::summarise(
n = dplyr::n(), #numero de casos por imc
media = mean(glicemia_jejum), #media por imc
desvio = sd(glicemia_jejum), #dp por imc
erro.padrao = desvio / sqrt(n) #erro padrao por imc
) |>
ggplot(aes(x = imc_classe, y = media)) +
# grafico de pontos
geom_point(size = 3) +
# errorbar
geom_errorbar(
aes(ymin = media - erro.padrao,
ymax = media + erro.padrao),
width = .1
)
# media com barras de erros (errorbar), por grupo de insulina
d_diab |>
# agrupa dados por imc e insulina
dplyr::group_by(imc_classe, insulina) |>
dplyr::summarise(
n = dplyr::n(), #numero de casos de insulina 'sim' e 'nao' por imc
media = mean(glicemia_jejum), #media de casos de insulina 'sim' e 'nao' por imc
desvio = sd(glicemia_jejum), #dp dos casos de insulina 'sim' e 'nao' por imc
erro.padrao = desvio / sqrt(n) #erro padrao dos casos de insulina 'sim' e 'nao' por imc
) |>
ggplot(aes(x = imc_classe, y = media, group = insulina, color = insulina)) +
# grafico de pontos
geom_point(size = 3) +
# errorbar
geom_errorbar(
aes(ymin = media - erro.padrao,
ymax = media + erro.padrao),
width = .1
) +
# nomes dos eixos x e y e legenda
labs(
x = "IMC categórico",
y = "Média do valor do exame de glicemia de jejum (em mg/dL)",
fill = "Usou insulina?"
) +
# tema (background) do grafico
theme_bw()
# junta graficos numa mesma imagem ----------------------------------------
g1 <- ggplot(d_diab, aes(x = imc_classe, y = after_stat(count)/sum(after_stat(count)))) +
geom_bar(color = "blue", fill = "white") +
scale_y_continuous(labels = scales::percent) +
geom_text(
stat = "count",
aes(label = round(after_stat(count)/sum(after_stat(count)), 1) * 100,
vjust = -1)
) +
labs(
title = "Frequência do IMC categórico das gestantes",
x = "IMC categórico",
y = "Frequência"
)
g2 <- ggplot(d_diab, aes(x = glicemia_jejum)) +
geom_histogram(color = "white", breaks = seq(90, 125, 5)) +
labs(
title = "Frequência dos valores do exame de glicemia de jejum",
x = "Glicemia de jejum (em mg/dL)",
y = "Frequência"
) +
theme_bw()
# graficos um embaixo do outro (usa-se o caractere /)
g1 / g2
# graficos lado a lado (usa-se o simbolo + ou |)
g1 + g2
# salva grafico -----------------------------------------------------------
ggsave("graficos/univariados.png", width = 16, height = 10)
# extra -------------------------------------------------------------------
# carregando dados do pnud
d_pnud_uf <- readr::read_csv("pnud_geobr.csv")
# carregando dados de aspectos geograficos pelo {geobr}
inf_uf_br <- read_state(code_state = "all", year = 2020) |>
rename(cod_uf = code_state)
# unindo bases do {geobr} e pnud
d_pnud_geobr <- cod_uf_br |>
left_join(d_pnud_uf, by = "cod_uf")
# mapa geografico
ggplot(d_pnud_geobr) +
# mapa geografico
geom_sf(aes(fill = espvida)) +
# preenche com escala de cores viridis
scale_fill_viridis_c(option = "mako") +
# inclui nomes de titulo, legenda da imagem e legenda
labs(
title = "Expectativa de vida no Brasil em 2020",
caption = "Fonte: PNUD, 4 de outubro de 2021.",
fill = "Expectativa \nde vida"
) +
# tema (background do grafico)
theme_minimal() +
# legenda embaixo do grafico
theme(legend.position = "bottom")