Como ajustar a margem de um gráfico no ggplot2?

Prezadxs, boa tarde!

Estou montando meus gráficos para o trabalho final do curso de Ciência de Dados 1 (que não consegui entregar dentro do prazo, mas isso não vem ao caso agora haha) e estou esbarrando em um problema com meus resultados.

O código abaixo representa um desses gráficos, quando rodo, defino o limite do eixo y como “600”, contudo, na hora de sair o output o eixo vem cortado nas bordas, mostrando apenas uma parte do “600”, além de cortar um pedaço do título também. Se eu libero a legenda para aparecer, ai fica certinho, porém nesse caso a legenda é desnecessária para o contexto.

De que maneira consigo corrigir isso sem necessariamente mostrar a legenda? Apenas corrigindo a exibição cortada do eixo e do título?

Muito obrigado!

Segue código para reprodução:

# instalar pacotes
# if(!require(pacman)) {install.packages("pacman")}
# pacman::p_load(magrittr, tidyverse, scales, ggthemes, readr)

# carregar pacotes
library(magrittr, include.only = "%>%")
#> Warning: package 'magrittr' was built under R version 4.0.3


# lendo base
imdb <- readr::read_csv("https://raw.githubusercontent.com/curso-r/202005-r4ds-1/master/dados/imdb.csv")
#> 
#> -- Column specification --------------------------------------------------------
#> cols(
#>   titulo = col_character(),
#>   ano = col_double(),
#>   diretor = col_character(),
#>   duracao = col_double(),
#>   cor = col_character(),
#>   generos = col_character(),
#>   pais = col_character(),
#>   classificacao = col_character(),
#>   orcamento = col_double(),
#>   receita = col_double(),
#>   nota_imdb = col_double(),
#>   likes_facebook = col_double(),
#>   ator_1 = col_character(),
#>   ator_2 = col_character(),
#>   ator_3 = col_character()
#> )

# transformando dados
imdb <-
  imdb %>%
  dplyr::mutate(lucro = receita - orcamento) 


# diretores com filmes mais lucrativos
imdb %>%
  # manipulacao #
  dplyr::filter(ano >= 2000, !is.na(diretor)) %>% 
  dplyr::arrange(dplyr::desc(lucro)) %>% 
  dplyr::top_n(15, lucro) %>% 
  dplyr::mutate(lucro = lucro/10^6) %>% 
  
  # grafico #
  ggplot2::ggplot(ggplot2::aes(x = reorder(diretor, lucro), y = lucro)) +
  ggplot2::geom_bar(stat = "identity", fill = "#88CCEE", alpha = .6 ) +
  ggplot2::coord_flip() +
  ggplot2::scale_y_continuous(labels = scales::dollar, expand = c(0, 0), limits = c(0, 600)) +
  ggplot2::geom_label(ggplot2::aes(y = lucro/2, x = diretor, label = scales::dollar(lucro))) +
  ggplot2::labs(y = "Lucro total (Milhoes de dolares)", x = "Diretor")+
  ggplot2::ggtitle("Top 15 - Diretores com filmes mais lucrativos (2000 a 2016)") +
  ggthemes::theme_clean(base_size = 13) +
  ggplot2::theme(
    plot.title = ggplot2::element_text(hjust = 0.5, face = "bold"),
    legend.position = "none",
    panel.background = ggplot2::element_rect(fill = "transparent", colour = NA),
    plot.background = ggplot2::element_rect(fill = "transparent", colour = NA),
    legend.background = ggplot2::element_rect(fill = "transparent", colour = NA),
    legend.box.background = ggplot2::element_rect(fill = "transparent", colour = NA)
  )

Created on 2021-03-30 by the reprex package (v0.3.0)

1 curtida

Oi Maykon!

Você pode usar o argumento plot.margin da função theme(). No seu exemplo:

imdb %>%
  # manipulacao #
  dplyr::filter(ano >= 2000, !is.na(diretor)) %>% 
  dplyr::arrange(dplyr::desc(lucro)) %>% 
  dplyr::top_n(15, lucro) %>% 
  dplyr::mutate(lucro = lucro/10^6) %>% 
  # grafico #
  ggplot2::ggplot(ggplot2::aes(x = reorder(diretor, lucro), y = lucro)) +
  ggplot2::geom_bar(stat = "identity", fill = "#88CCEE", alpha = .6 ) +
  ggplot2::coord_flip() +
  ggplot2::scale_y_continuous(labels = scales::dollar, expand = c(0, 0), limits = c(0, 600)) +
  ggplot2::geom_label(ggplot2::aes(y = lucro/2, x = diretor, label = scales::dollar(lucro))) +
  ggplot2::labs(y = "Lucro total (Milhoes de dolares)", x = "Diretor")+
  ggplot2::ggtitle("Top 15 - Diretores com filmes mais lucrativos (2000 a 2016)") +
  ggthemes::theme_clean(base_size = 13) +
  ggplot2::theme(
    plot.title = ggplot2::element_text(hjust = 0.5, face = "bold"),
    legend.position = "none",
    panel.background = ggplot2::element_rect(fill = "transparent", colour = NA),
    plot.background = ggplot2::element_rect(fill = "transparent", colour = NA),
    legend.background = ggplot2::element_rect(fill = "transparent", colour = NA),
    legend.box.background = ggplot2::element_rect(fill = "transparent", colour = NA),
    plot.margin = ggplot2::unit(c(1, 1, 1, 1), "cm")
  )

1 curtida

Desconfiei que era algo a ver com os argumentos de margem, porém não fazia ideia de como ajustar.
Muito obrigado, Will!

1 curtida