5  Dia 2 - Customizando gráficos com ggplot2

Ministrante

5.1 Carregando pacotes

O pacote tidyverse é um conjunto de pacotes, e nele encontramos pacotes úteis para essa oficina, como o readr, dplyr e ggplot2. Vamos carregá-lo:

library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.2     ✔ tibble    3.3.0
✔ lubridate 1.9.4     ✔ tidyr     1.3.1
✔ purrr     1.0.4     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

5.2 Importando dados

Vamos carregar a base de dados com a função read_rds():

1dados <- read_rds("dados/sidra_4092_arrumado.rds")
2glimpse(dados)
1
Importando os dados
2
Espiando a tabela: quantas colunas tem? quantas linhas? quais são as variáveis?
Rows: 1,431
Columns: 16
$ uf                                       <chr> "Amapá", "Bahia", "Rio Grande…
$ uf_codigo                                <fct> 16, 29, 24, 27, 13, 28, 25, 2…
$ uf_sigla                                 <chr> "AP", "BA", "RN", "AL", "AM",…
$ regiao                                   <chr> "Norte", "Nordeste", "Nordest…
$ trimestre                                <chr> "1º trimestre 2012", "1º trim…
$ trimestre_codigo                         <chr> "201201", "201201", "201201",…
$ ano                                      <dbl> 2012, 2012, 2012, 2012, 2012,…
$ trimestre_inicio                         <date> 2012-01-01, 2012-01-01, 2012…
$ mil_pessoas_total                        <dbl> 487, 10986, 2540, 2383, 2463,…
$ mil_pessoas_forca_de_trabalho            <dbl> 318, 6888, 1370, 1173, 1558, …
$ mil_pessoas_forca_de_trabalho_ocupada    <dbl> 278, 6086, 1211, 1041, 1386, …
$ mil_pessoas_forca_de_trabalho_desocupada <dbl> 40, 802, 159, 133, 173, 99, 1…
$ mil_pessoas_fora_da_forca_de_trabalho    <dbl> 170, 4098, 1170, 1210, 905, 6…
$ prop_desocupacao                         <dbl> 0.12578616, 0.11643438, 0.116…
$ perc_desocupacao                         <dbl> 12.578616, 11.643438, 11.6058…
$ periodo_pandemia                         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…

Vamos criar também um objeto contendo apenas aos dados referentes ao trimestre mais recente, para usar em alguns exemplos:

dados_tri_recente <- dados |>  
1  filter(trimestre_inicio == max(trimestre_inicio))
1
Filtrando os dados para o trimestre mais recente

5.3 Customizando gráficos

Até aqui, discutimos como criar gráficos exploratórios, e vimos que o ggplot2 nos permite criar gráficos de forma simples e rápida.

Após criar um gráfico exploratório que nos ajuda a entender os dados, podemos customizá-lo para apresentar a outras pessoas, ou para publicar em relatórios e artigos.

Vamos ver algumas formas de customizar os gráficos criados, partindo do gráfico a seguir:

grafico_base <- dados_tri_recente |> 
  ggplot() + 
  aes(y = uf, x = perc_desocupacao) + 
  geom_col()

grafico_base

5.3.1 Ordenando as barras

O ggplot ordena variáveis de texto em ordem alfabética. No exemplo acima, as barras estão ordenadas de acordo com a ordem alfabética dos estados: o Acre aparece primeiro, e o Tocantins, por último.

Podemos ordenar as barras do gráfico de colunas de acordo com o valor da variável numérica utilizada (neste caso, perc_desocupacao).

Para isso, precisaremos transformar a variável de texto uf em uma variável categórica ordenada (ou seja, um fator/factor).

5.3.1.1 Fatores / factors

Os fatores são utilizados para representar variáveis categóricas no R. Essas variáveis podem ser ordenadas ou não.

Eles são úteis para controlar a ordem de exibição de variáveis categóricas em gráficos, tabelas e modelos estatísticos.

Vamos criar um exemplo simples, criando uma tabela com a escolaridade de um grupo de pessoas:

escolaridade <- tibble(
  nome = c(
    "Maria",
    "João",
    "Pedro",
    "Ana",
    "José",
    "Carlos",
    "Mariana",
    "Lucas"
  ),
  escolaridade_concluida = c(
    "Pós-graduação",
    "Ensino Médio",
    "Ensino Fundamental II",
    "Ensino Fundamental I",
    "Ensino Fundamental I",
    "Sem instrução",
    "Ensino Técnico",
    "Graduação"
  )
)

Se ordenarmos a tabela pela variável escolaridade_concluida, veremos que a ordem é alfabética:

escolaridade |> 
  arrange(escolaridade_concluida)
# A tibble: 8 × 2
  nome    escolaridade_concluida
  <chr>   <chr>                 
1 Ana     Ensino Fundamental I  
2 José    Ensino Fundamental I  
3 Pedro   Ensino Fundamental II 
4 João    Ensino Médio          
5 Mariana Ensino Técnico        
6 Lucas   Graduação             
7 Maria   Pós-graduação         
8 Carlos  Sem instrução         

Para que, por exemplo, a variável escolaridade_concluida seja ordenada de acordo com a ordem de escolaridade, podemos transformá-la em um fator ordenado, utilizando a função factor(), e indicando quais são os níveis (levels) de escolaridade, na ordem que queremos que apareçam:

escolaridade |>
  mutate(
1  escolaridade_concluida_fct = factor(
2    escolaridade_concluida,
3    levels = c(
      "Sem instrução", 
      "Ensino Fundamental I", 
      "Ensino Fundamental II", 
      "Ensino Médio", 
      "Ensino Técnico", 
      "Graduação", 
      "Pós-graduação" 
      )
    )
  ) |> 
4  arrange(escolaridade_concluida_fct)
1
Criando uma nova variável escolaridade_concluida_fct usando a função factor()
2
Variável que será transformada em fator
3
Níveis de escolaridade, na ordem que queremos que apareçam
4
Ordenando a tabela pela variável escolaridade_concluida_fct
# A tibble: 8 × 3
  nome    escolaridade_concluida escolaridade_concluida_fct
  <chr>   <chr>                  <fct>                     
1 Carlos  Sem instrução          Sem instrução             
2 Ana     Ensino Fundamental I   Ensino Fundamental I      
3 José    Ensino Fundamental I   Ensino Fundamental I      
4 Pedro   Ensino Fundamental II  Ensino Fundamental II     
5 João    Ensino Médio           Ensino Médio              
6 Mariana Ensino Técnico         Ensino Técnico            
7 Lucas   Graduação              Graduação                 
8 Maria   Pós-graduação          Pós-graduação             

A função factor() é do R base, ou seja, não precisamos carregar nenhum pacote adicional para utilizá-la. Porém o pacote {forcats} (que faz parte do {tidyverse}) apresenta funções mais avançadas para trabalhar com fatores, como a função fct_reorder() que veremos a seguir.

5.3.1.2 Voltando ao exemplo do gráfico de colunas

Para isso, precisamos fazer uma transformação na variável uf, para que ela seja ordenada de acordo com o valor de perc_desocupacao. Isso deve ser feito antes de criar o gráfico.

Vamos ordenar as barras do gráfico anterior, de acordo com o valor de perc_desocupacao. Para isso, utilizamos a função fct_reorder() do pacote {forcats}.

A função fct_reorder() recebe dois argumentos:

  • A variável que queremos ordenar (a variável categórica que é representada em cada coluna)
  • A variável que será utilizada para ordenar a primeira variável (a variável numérica que será utilizada para ordenar a variável categórica)

No caso do nosso exemplo, queremos ordenar as barras de acordo com o valor de perc_desocupacao, e a variável categórica que queremos ordenar é uf. Portanto, usaremos fct_reorder(uf, perc_desocupacao).

grafico_ordenado <- dados_tri_recente |> 
1  mutate(uf_fct = fct_reorder(uf, perc_desocupacao)) |>
  ggplot() + 
2  aes(y = uf_fct, x = perc_desocupacao) +
  geom_col()

grafico_ordenado
1
Como explicado acima, criamos uma nova variável uf_fct que será utilizada para ordenar as barras de acordo com o valor de perc_desocupacao.
2
Utilizaremos no eixo y a variável criada: uf_fct.

5.3.2 Títulos e rótulos

Por padrão, o gráfico está sem título, e com o nome das colunas nos eixos x e y e legendas.

O ggplot2 permite adicionar títulos e rótulos aos gráficos, utilizando a função labs(). Essa função apresenta vários argumentos, que podem ser divididos em dois grupos:

  • Elementos com informações do gráficos: sempre estão disponíveis. Ex: title, subtitle, caption

  • Elementos relacionados aos atributos estéticos: dependem dos mapeamentos feitos com a função aes(). Ex: x, y, fill, color

Vamos adicionar um título ao gráfico anterior, e rótulos para os eixos x e y:

grafico_com_labels <- grafico_ordenado + 
  labs(
1    title = "Taxa de desocupação por estado",
    subtitle = "Dados para o 2º trimestre 2024",
    caption = "Fonte: Dados referentes à PNAD Contínua Trimestral, obtidos no SIDRA/IBGE.",
2    x = "Taxa de desocupação (%)",
    y = "Estado",
  )

grafico_com_labels
1
Informações sobre o gráfico
2
Atributos estéticos utilizados

5.3.3 Escalas

O {ggplot2} apresenta várias funções para trabalhar com as escalas dos gráficos. Essas funções apresentam o prefixo scale_.

Vamos explorar algumas dessas funções para trabalhar com escalas, mas lembre-se que existem muitas outras funções para customizar as escalas dos gráficos.

ls("package:ggplot2") |> 
  stringr::str_subset("^scale_")
  [1] "scale_alpha"                "scale_alpha_binned"        
  [3] "scale_alpha_continuous"     "scale_alpha_date"          
  [5] "scale_alpha_datetime"       "scale_alpha_discrete"      
  [7] "scale_alpha_identity"       "scale_alpha_manual"        
  [9] "scale_alpha_ordinal"        "scale_color_binned"        
 [11] "scale_color_brewer"         "scale_color_continuous"    
 [13] "scale_color_date"           "scale_color_datetime"      
 [15] "scale_color_discrete"       "scale_color_distiller"     
 [17] "scale_color_fermenter"      "scale_color_gradient"      
 [19] "scale_color_gradient2"      "scale_color_gradientn"     
 [21] "scale_color_grey"           "scale_color_hue"           
 [23] "scale_color_identity"       "scale_color_manual"        
 [25] "scale_color_ordinal"        "scale_color_steps"         
 [27] "scale_color_steps2"         "scale_color_stepsn"        
 [29] "scale_color_viridis_b"      "scale_color_viridis_c"     
 [31] "scale_color_viridis_d"      "scale_colour_binned"       
 [33] "scale_colour_brewer"        "scale_colour_continuous"   
 [35] "scale_colour_date"          "scale_colour_datetime"     
 [37] "scale_colour_discrete"      "scale_colour_distiller"    
 [39] "scale_colour_fermenter"     "scale_colour_gradient"     
 [41] "scale_colour_gradient2"     "scale_colour_gradientn"    
 [43] "scale_colour_grey"          "scale_colour_hue"          
 [45] "scale_colour_identity"      "scale_colour_manual"       
 [47] "scale_colour_ordinal"       "scale_colour_steps"        
 [49] "scale_colour_steps2"        "scale_colour_stepsn"       
 [51] "scale_colour_viridis_b"     "scale_colour_viridis_c"    
 [53] "scale_colour_viridis_d"     "scale_continuous_identity" 
 [55] "scale_discrete_identity"    "scale_discrete_manual"     
 [57] "scale_fill_binned"          "scale_fill_brewer"         
 [59] "scale_fill_continuous"      "scale_fill_date"           
 [61] "scale_fill_datetime"        "scale_fill_discrete"       
 [63] "scale_fill_distiller"       "scale_fill_fermenter"      
 [65] "scale_fill_gradient"        "scale_fill_gradient2"      
 [67] "scale_fill_gradientn"       "scale_fill_grey"           
 [69] "scale_fill_hue"             "scale_fill_identity"       
 [71] "scale_fill_manual"          "scale_fill_ordinal"        
 [73] "scale_fill_steps"           "scale_fill_steps2"         
 [75] "scale_fill_stepsn"          "scale_fill_viridis_b"      
 [77] "scale_fill_viridis_c"       "scale_fill_viridis_d"      
 [79] "scale_linetype"             "scale_linetype_binned"     
 [81] "scale_linetype_continuous"  "scale_linetype_discrete"   
 [83] "scale_linetype_identity"    "scale_linetype_manual"     
 [85] "scale_linewidth"            "scale_linewidth_binned"    
 [87] "scale_linewidth_continuous" "scale_linewidth_date"      
 [89] "scale_linewidth_datetime"   "scale_linewidth_discrete"  
 [91] "scale_linewidth_identity"   "scale_linewidth_manual"    
 [93] "scale_linewidth_ordinal"    "scale_radius"              
 [95] "scale_shape"                "scale_shape_binned"        
 [97] "scale_shape_continuous"     "scale_shape_discrete"      
 [99] "scale_shape_identity"       "scale_shape_manual"        
[101] "scale_shape_ordinal"        "scale_size"                
[103] "scale_size_area"            "scale_size_binned"         
[105] "scale_size_binned_area"     "scale_size_continuous"     
[107] "scale_size_date"            "scale_size_datetime"       
[109] "scale_size_discrete"        "scale_size_identity"       
[111] "scale_size_manual"          "scale_size_ordinal"        
[113] "scale_type"                 "scale_x_binned"            
[115] "scale_x_continuous"         "scale_x_date"              
[117] "scale_x_datetime"           "scale_x_discrete"          
[119] "scale_x_log10"              "scale_x_reverse"           
[121] "scale_x_sqrt"               "scale_x_time"              
[123] "scale_y_binned"             "scale_y_continuous"        
[125] "scale_y_date"               "scale_y_datetime"          
[127] "scale_y_discrete"           "scale_y_log10"             
[129] "scale_y_reverse"            "scale_y_sqrt"              
[131] "scale_y_time"              

5.3.3.1 Escalas de cores

O {ggplot2} utiliza uma paleta de cores padrão bem colorida, observada nos exemplos anteriores. Porém podemos mudar a paleta de cores, ou até mesmo criar uma paleta de cores personalizada.

As funções de escalas de cores dependerão do tipo de atributo estético utilizado: fill ou color.

Quando usamos o atributo fill, utilizamos as funções scale_fill_*(). Quando usamos o atributo color, utilizamos as funções scale_color_*().

Outro ponto importante é que as funções de escalas de cores dependem do tipo de variável que estamos mapeando.

Por exemplo, se a variável mapeada é categórica, podemos usar a função scale_fill_viridis_d() para preencher as barras com uma paleta de cores viridis. Utilizando o exemplo que estamos criando, a região pode ser mapeada no atributo fill:

dados_tri_recente |> 
  ggplot() +
  aes(y = uf, x = perc_desocupacao) +
  geom_col(aes(fill = regiao)) +
  scale_fill_viridis_d() 

Mas se a variável mapeada é numérica, podemos usar a função scale_fill_viridis_c(). O exemplo abaixo apresenta um gráfico similar, mas mapeando a variável perc_desocupacao no atributo fill:

dados_tri_recente |> 
  ggplot() +
  aes(y = uf, x = perc_desocupacao) +
  geom_col(aes(fill = perc_desocupacao)) +
  scale_fill_viridis_c()

  • Para o atributo color:
ls("package:ggplot2") |> 
  stringr::str_subset("^scale_") |> 
  stringr::str_subset("color")
 [1] "scale_color_binned"     "scale_color_brewer"     "scale_color_continuous"
 [4] "scale_color_date"       "scale_color_datetime"   "scale_color_discrete"  
 [7] "scale_color_distiller"  "scale_color_fermenter"  "scale_color_gradient"  
[10] "scale_color_gradient2"  "scale_color_gradientn"  "scale_color_grey"      
[13] "scale_color_hue"        "scale_color_identity"   "scale_color_manual"    
[16] "scale_color_ordinal"    "scale_color_steps"      "scale_color_steps2"    
[19] "scale_color_stepsn"     "scale_color_viridis_b"  "scale_color_viridis_c" 
[22] "scale_color_viridis_d" 
  • Para o atributo fill:
ls("package:ggplot2") |> 
  stringr::str_subset("^scale_") |> 
  stringr::str_subset("fill")
 [1] "scale_fill_binned"     "scale_fill_brewer"     "scale_fill_continuous"
 [4] "scale_fill_date"       "scale_fill_datetime"   "scale_fill_discrete"  
 [7] "scale_fill_distiller"  "scale_fill_fermenter"  "scale_fill_gradient"  
[10] "scale_fill_gradient2"  "scale_fill_gradientn"  "scale_fill_grey"      
[13] "scale_fill_hue"        "scale_fill_identity"   "scale_fill_manual"    
[16] "scale_fill_ordinal"    "scale_fill_steps"      "scale_fill_steps2"    
[19] "scale_fill_stepsn"     "scale_fill_viridis_b"  "scale_fill_viridis_c" 
[22] "scale_fill_viridis_d" 

Um ponto a ter atenção é o tipo de paleta de cores usadas. Algumas paletas de cores são mais adequadas para representar variáveis categóricas, enquanto outras são mais adequadas para representar variáveis numéricas. Veja a imagem com exemplos de paletas categóricas, sequenciais, e divergentes:

Fonte da imagem: tmap book.

5.3.3.2 Escalas de eixos: datas

Podemos customizar a escala do eixo x para apresentar as datas de forma personalizada. É importante que, para isso, a variável seja do tipo Date ou Datetime.

Para isso, utilizamos a função scale_x_date(). Ela apresenta alguns argumentos importantes:

  • breaks: indica a frequência das marcações no eixo x. Alguns exemplos são: "1 month" (marcação a cada mês), "3 months" (marcação a cada 3 meses), “1 year” (marcação a cada ano), entre outros.

  • date_labels: formato da data que será apresentado. Alguns exemplos são: "%m/%Y" (mês/ano), "%d/%m/%Y" (dia/mês/ano), "%b/%Y" (mês abreviado/ano), entre outros.

Vamos criar um gráfico de linhas para visualizar a evolução da taxa de desocupação desde 2022 para a Bahia, e customizar a escala do eixo x para apresentar as datas de forma a apresentar uma marcação cada 3 meses:

dados |>
1  filter(uf_sigla == "SP", ano >= 2019) |>
  ggplot() +
  aes(x = trimestre_inicio, y = perc_desocupacao) +
  geom_line() +
  geom_point() +
2  scale_x_date(
3    breaks = "6 months",
4    date_labels = "%m/%Y",
5    minor_breaks = "1 months"
  )
1
Filtrando os dados para o estado de São Paulo, e considerando apenas os dados a partir de 2019.
2
Customizando a escala de data no eixo x.
3
Queremos que a marcação apareça a cada 3 meses.
4
Formato da data que será apresentado (mês/ano).
5
A minor break é uma linha que aparece entre as marcações principais, porém sem indicar uma legenda. Neste caso, queremos que apareça a cada mês.

5.3.3.3 Escalas de eixos: numérico

Podemos customizar a escala dos eixos x e/ou y quando estamos mapeando variáveis numéricas utilizando as funções scale_x_continuous() e scale_y_continuous().

O gráfico apresentado no exemplo anterior (onde configuramos a escala de datas) está com o eixo y limitado na faixa onde os dados são encontrados (11% à 18%). Porém, precisamos ter cuidado ao limitar os eixos, pois isso pode distorcer a visualização dos dados.

Podemos definir que o eixo y comece em 0 e termine em 20%, utilizando o argumento limits da função scale_y_continuous():

dados |>
  filter(uf_sigla == "SP", ano >= 2019) |>
  ggplot() +
  aes(x = trimestre_inicio, y = perc_desocupacao) +
  geom_line() +
  geom_point() +
  scale_y_continuous(limits = c(0, 20))

5.3.4 Temas

Os gráficos que criamos até aqui utilizam o tema padrão do {ggplot2} (podemos identificar facilmente pelo fundo cinza).

Porém existem funções para customizar o tema dos gráficos, alterando a cor de fundo, a cor dos textos, a fonte, entre outros elementos.

5.3.4.1 {ggplot2}

O {ggplot2} apresenta alguns temas que podem ser utilizados nos gráficos, utilizando funções com o prefixo theme_*():

ls("package:ggplot2") |> 
  stringr::str_subset("^theme_") 
 [1] "theme_bw"       "theme_classic"  "theme_dark"     "theme_get"     
 [5] "theme_gray"     "theme_grey"     "theme_light"    "theme_linedraw"
 [9] "theme_minimal"  "theme_replace"  "theme_set"      "theme_test"    
[13] "theme_update"   "theme_void"    

Por exemplo, podemos alterar o tema do gráfico grafico_ordenado (criado anteriormente) para o tema theme_minimal():

grafico_com_labels + 
  theme_minimal()

5.3.4.2 {ggthemes}

O pacote {ggthemes} apresenta vários temas adicionais que podem ser utilizados nos gráficos criados com o {ggplot2}.

1install.packages("ggthemes")
1
Caso não tenha o pacote instalado, utilize essa linha de código para instalar o pacote.

A lista abaixo apresenta os temas disponíveis no pacote {ggthemes}:

library(ggthemes)
ls("package:ggthemes") |> 
  stringr::str_subset("^theme_") 
 [1] "theme_base"            "theme_calc"            "theme_clean"          
 [4] "theme_economist"       "theme_economist_white" "theme_excel"          
 [7] "theme_excel_new"       "theme_few"             "theme_fivethirtyeight"
[10] "theme_foundation"      "theme_gdocs"           "theme_hc"             
[13] "theme_igray"           "theme_map"             "theme_pander"         
[16] "theme_par"             "theme_solarized"       "theme_solarized_2"    
[19] "theme_solid"           "theme_stata"           "theme_tufte"          
[22] "theme_wsj"            

Podemos usar o tema theme_economist() para customizar o gráfico grafico_com_labels:

grafico_com_labels + 
  ggthemes::theme_economist()

5.3.5 Usando as funções de customização

Nos exemplos acima, apresentamos algumas funções para customizar os gráficos criados com o {ggplot2}.

Vamos usar essas funções para customizar o gráfico apresentado no exemplo acima:

1grafico_customizado <- dados |>
  filter(regiao == "Sudeste") |> 
  ggplot() + 
  aes(x = trimestre_inicio, y = perc_desocupacao, color = uf) +  
  geom_line() + 
2  theme_light() +
3  scale_color_viridis_d(end = 0.9) +
4  scale_x_date(breaks = "1 year", date_labels = "%Y") +
5  labs(
    title = "Taxa de desocupação por estado na região Sudeste",
    subtitle = "Dados da PNAD Contínua Trimestral",
    caption = "Fonte dos dados: SIDRA/IBGE.",
    color = "Estado",
    x = "Ano",
    y = "Taxa de desocupação (%)"
  )

grafico_customizado
1
Vamos salvar o resultado do gráfico em um objeto.
2
Utilizando o tema theme_ipea() do pacote {ipeaplot}.
3
Utilizando a função scale_color_ipea() (do pacote {ipeaplot}) com paleta de cores Orange-Blue.
4
Customizando a escala de data no eixo x: apresentar uma marcação a cada ano.
5
Adicionando títulos e rótulos ao gráfico.

5.4 Salvando os gráficos

Podemos salvar o gráfico em um arquivo, para utilizá-lo posteriormente. Para isso, criamos um objeto contendo o gráfico que queremos salvar, e utilizamos a função ggsave().

A função ggsave() salva o gráfico em um arquivo, e apresenta dois argumentos principais:

  • filename: nome do arquivo onde o gráfico será salvo

  • plot: objeto contendo o gráfico que será salvo

Essa função também apresenta alguns argumentos para customizar como o gráfico será salvo, como:

  • width: largura do gráfico

  • height: altura do gráfico

  • units: unidade de medida para a largura e altura do gráfico

  • dpi: resolução do gráfico (quanto maior o valor, melhor a qualidade da imagem)

Vamos utilizar o gráfico customizado criado anteriormente (salvo no objeto grafico_customizado), e salvar em um arquivo utilizando a função ggsave():

# fs::dir_create("graficos/")
1ggsave(
2  filename = "graficos/grafico_customizado.png",
3  plot = grafico_customizado,
4  width = 7,
5  height = 5,
6  dpi = 300
)
1
Função para salvar o gráfico.
2
Nome do arquivo onde o gráfico será salvo.
3
Objeto contendo o gráfico que será salvo.
4
Largura do gráfico.
5
Altura do gráfico.
6
Resolução do gráfico.

Podemos verificar se o gráfico foi salvo corretamente, utilizando a função file.exists():

file.exists("graficos/grafico_customizado.png")
[1] TRUE