es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Facet_wrap no está ordenando correctamente las gráficas por sus valores.

Estoy intentando organizar mis gráficos por valor utilizando facet_wrap(), sin embargo, algunos de ellos no están en orden de beneficio de ventas. Aquí está la imagen:

Rplot.png

Mi código:

Lucro_Categorias %>%
  mutate(Categoria = Categoria %>%
  as_factor() %>%
  fct_reorder(Lucro)) %>%
  ggplot(aes(x = Ano, y = Lucro, fill = Categoria, order = -Lucro)) +
  geom_col() +
  facet_wrap(~ Categoria, scales = "free_y") +
  theme_tq() +
  scale_y_continuous(labels = scales::dollar_format(prefix = "", suffix = "", big.mark = ".", decimal.mark = ","))

Aquí están los archivos de origen: aquí y aquí.

¿Cómo puedo mover los dos gráficos circulados en negro a donde he señalado con la flecha?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para organizar los gráficos por valor utilizando facet_wrap(), podemos agregar la función fct_reorder() del paquete forcats dentro de mutate() para reordenar los niveles de nuestra variable categórica, Categoria, basándonos en los valores de Lucro. Luego, podemos establecer el parámetro order dentro de ggplot() como -Lucro.

    En el código proporcionado, este paso ya ha sido implementado. Sin embargo, hay dos gráficos que no están en el orden deseado. Para moverlos a la posición específica que se muestra en la imagen, podemos utilizar el parámetro limits dentro de scale_y_continuous() para ajustar manualmente los límites del eje y para esos gráficos específicos.

    Entonces, para mover los dos gráficos marcados en negro a donde apunta la flecha, podemos modificar el código de la siguiente manera:

    library(tidyverse)
    library(scales)
    
    # leer los datos
    Vendas <- read_csv("Vendas.csv")
    
    # crear una nueva variable para calcular el beneficio
    Lucro_Categorias <- Vendas %>% 
      group_by(Categoria, Ano) %>% 
      summarize(Lucro = sum(Lucro))
    
    # reordenar la variable categórica basada en el beneficio
    Lucro_Categorias <- Lucro_Categorias %>% 
      mutate(Categoria = Categoria %>% 
               as_factor() %>% 
               fct_reorder(Lucro))
    
    # graficar los datos
    ggplot(Lucro_Categorias, aes(x = Ano, y = Lucro, fill = Categoria, order = -Lucro)) +
      geom_col() +
      # ajustar manualmente los límites del eje y para los dos gráficos marcados en negro
      facet_wrap(~ Categoria, scales = "free_y", 
                 # establecer límites para 'Tecido Pirulito' y 'Toalha Estampada'
                 # para moverlos a la posición deseada
                 strip.position = "bottom", 
                 # agregar límites del eje y para cada facet
                 labeller = labeller(Categoria = function(x) {
                   ifelse(x == "Tecido Pirulito", "Tecido Pirulito (5000 a 7404)", 
                          ifelse(x == "Toalha Estampada", "Toalha Estampada (-1661 a 4357)", x))
                 })) +
      theme_tq() +
      scale_y_continuous(labels = dollar_format(prefix = "", suffix = "", big.mark = ".", decimal.mark = ","),
                         # establecer límites del eje y para cada facet
                         limits = list(c(-3000, 4500), c(5000, 7404), c(-1661, 4357), c(0, 8000)))
    

    En la función facet_wrap(), establecemos strip.position = "bottom" para mover las etiquetas de los facets hacia la parte inferior de cada gráfico. También agregamos una función personalizada labeller para cambiar la etiqueta de los dos gráficos marcados en negro e incluir los valores específicos de beneficio. Por último, establecemos los límites del eje y para cada facet utilizando el parámetro limits dentro de scale_y_continuous().

Comments are closed.