Perguntas de Layout

Dentro de um ggplot, quase todas as áreas representadas podem ser modificadas e ajustadas. Algumas dessas alterações serão discutidas a seguir.

Para isso, primeiro criamos novamente um objeto ggplot com nosso gráfico de dispersão da introdução ao ggplot:

scatter <- ggplot(
  pss, 
  aes(
    stfeco, 
    stfdem
  )
) +  
  geom_jitter(
    alpha = .2, 
    col = "blue"
  ) +
  scale_x_continuous(
    breaks = seq(
      0, 
      10, 
      1
    )
  ) +
  scale_y_continuous(
    breaks = seq(
      0, 
      10, 
      1
    )
  )

scatter
## Warning: Removed 96 rows containing missing values or values outside the scale range
## (`geom_point()`).

Primeiro, adicionamos novamente título, rótulos dos eixos e fontes.

scatterLeg <- scatter +
  labs(
       x = "Satisfaction with Economy",
       y = "Satisfaction with Democracy",
       title = "Correlation Plot",
       caption = "Data: Panem Social Survey.\n Data jittered."
       )

scatterLeg
## Warning: Removed 96 rows containing missing values or values outside the scale range
## (`geom_point()`).

Dentro da função theme(), podemos abordar e alterar áreas específicas do gráfico. Isso inclui propriedades como:

  • plot.title
  • axis.title.x / axis.title.y
  • axis.text.x / axis.text.y
  • panel.grid / panel.grid.minor / panel.grid.major
  • plot.background / panel.background

Uma visão completa de todas as configurações que podem ser usadas em theme() pode ser encontrada na Documentação do Usuário.

Wir vamos fazer alterações gradualmente. Primeiro, vamos alterar o tamanho da fonte, a posição e a aparência do título. Isso é feito através de plot.title em theme(). Para isso, usamos a função element_text():

scatterLeg +
  theme(
    plot.title = element_text(
      size = 25,
      face = "italic",
      hjust = 0.5
    )
  )
## Warning: Removed 96 rows containing missing values or values outside the scale range
## (`geom_point()`).

Para isso, usamos os três argumentos size (tamanho da fonte), face (aparência) e hjust (posição).

Em seguida, vamos editar os títulos dos eixos.

scatterAxes <- scatterLeg +
  theme(
    plot.title = element_text(
      size = 25,
      face = "italic",
      hjust = 0.5
    ),
    axis.title.x = element_text(
      size = 16, 
      color = "seagreen", 
      hjust = 0
    ),
    axis.title.y = element_text(
      size = 8, 
      color = rgb(
        0, 
        105, 
        179, 
        maxColorValue = 255
      ), 
      hjust = 1, 
      face = "bold"
    )
  )

scatterAxes
## Warning: Removed 96 rows containing missing values or values outside the scale range
## (`geom_point()`).

Em vez de especificar uma cor, você pode determinar o tom de cor usando a função rgb(). Alternativamente, você também pode usar o código HTML da cor dentro do argumento color.

scatterLeg +
  theme(
    plot.title = element_text(
      size = 25,
      face = "italic",
      hjust = 0.5
    ),
    axis.title.x = element_text(
      size = 16, 
      color = "seagreen", 
      hjust = 0
    ),
    axis.title.y = element_text(
      size = 8, 
      color = "#0069B3", 
      hjust = 1, 
      face = "bold"
    )
  )
## Warning: Removed 96 rows containing missing values or values outside the scale range
## (`geom_point()`).

Agora, vamos continuar experimentando e editar as marcas dos eixos. Para isso, usamos axis.ticks.x ou axis.ticks.y.

scatterTicks <- scatterAxes +
  theme(
    axis.text.x = element_text(
      size = 12, 
      angle = 45,
      color = "darkgrey"
    ),
    axis.text.y = element_text(
      size = 11, 
      hjust = 0,
      vjust = 1
    )
  )

scatterTicks
## Warning: Removed 96 rows containing missing values or values outside the scale range
## (`geom_point()`).

Com o argumento angle, podemos girar as marcações dos eixos. Com hjust e vjust, podemos alterar a posição inicial do texto.

Em seguida, queremos alterar o grid do gráfico, ou seja, as linhas. Para isso, primeiro usamos o argumento panel.grid e dentro do argumento a função element_line()

scatterGrid <- scatterTicks +
  theme(
    panel.grid = element_line(
      color = "green",
      size = 1,
      linetype = "solid" # blank, solid, dashed, dotted, dotdash, longdash, twodash 
    )
  )
## Warning: The `size` argument of `element_line()` is deprecated as of ggplot2 3.4.0.
## ℹ Please use the `linewidth` argument instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
scatterGrid
## Warning: Removed 96 rows containing missing values or values outside the scale range
## (`geom_point()`).

Com os argumentos panel.grid.major e panel.grid.minor, as linhas principais e auxiliares podem ser editadas separadamente. Se quisermos apenas as linhas principais, fazemos o seguinte:

scatterGrid <- scatterTicks +
  theme(
    panel.grid.major = element_line(
      color = "green",
      size = 1,
      linetype = "solid" # blank, solid, dashed, dotted, dotdash, longdash, twodash 
    ),
    panel.grid.minor = element_blank()
  )

scatterGrid
## Warning: Removed 96 rows containing missing values or values outside the scale range
## (`geom_point()`).

Também é possível editar as linhas auxiliares separadamente por eixo. Para isso, basta adicionar .x ou .y respectivamente.

Por fim, é possível alterar o fundo do gráfico ou do painel. Isso é feito através dos argumentos plot.background ou panel.background. Para isso, usamos a função element_rect() dentro do argumento

scatterGrid +
  theme(
    plot.background = element_rect(
      color ="darkgray",
      size = 2,
      fill = "lightpink"
    ),
    panel.background = element_rect(
      fill = "moccasin"
    )
  )
## Warning: The `size` argument of `element_rect()` is deprecated as of ggplot2 3.4.0.
## ℹ Please use the `linewidth` argument instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: Removed 96 rows containing missing values or values outside the scale range
## (`geom_point()`).

Existem também uma série de temas predefinidos que podem ser personalizados individualmente.

Uma visão geral dos temas disponíveis está aqui.