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.

Cómo crear un gráfico de línea y barras juntas en R.

Hola, disculpa si esta publicación está formateada incorrectamente, nunca he publicado en este foro. Estaba buscando ayuda para crear un gráfico de barras y un gráfico de líneas en un solo gráfico. El código que tengo a continuación es lo que tengo hasta ahora. Sin embargo, cuando realmente grafico las parcelas, obtengo el gráfico adjunto. ¿Dónde estoy cometiendo un error?

applemusic_subsrev <- read_csv("applemusic_revenueandsubs.csv", showcol_types = F)
applemusic_subsrev2 <- subset(applemusic_subsrev, select = c(1:3))[-c(7),]
applemusic_subsrev2 <- applemusic_subsrev2 |> filter(!is.na(Revenue)) |> 
mutate(Revenue = gsub("[\\$]", "", Revenue),
       Revenue = gsub("billion", "", Revenue),
       Users = gsub("million", "", Users))
applemusic_subsrev2$Revenue <- as.numeric(as.character(applemusic_subsrev2$Revenue))
applemusic_subsrev2$Users <- as.numeric(as.character(applemusic_subsrev2$Users)) |> 
mutate(Revenue = Revenue*1000)
applemusic_subsrev2 <- applemusic_subsrev2 |> mutate(Revenue = Revenue*1000)

H1 Ingresos en millones

df <- data.frame(applemusic_subsrev2)

H1 Marco de datos para gráfico

ggplot(df) +
  geom_bar(aes(x = Year , weight = Users), fill = "grey70") +
  geom_line(aes(x = Year, y = Revenue, colour = "yellow")) + 
  scale_colour_manual(name = "Legend", labels = c("Value in 100"), values = c("black"))

Datos Dput

estructura(list(Año = c(2015, 2016, 2017, 2018, 2019, 2020, NA), Ingresos = c(NA, "$0.6 billones", "$1.1 billones", "$1.8 billones", "$2.8 billones", "$4.1 billones", NA), Usuarios = c("11 millones", "20 millones", "27 millones", "40 millones", "50 millones", "72 millones",
NA),...4 = c(NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, -7L), spec = estructura(list(cols = list(Año = estructura(list(), class = c("collector_double", "collector")), Ingresos = estructura(list(), class = c("collector_character", "collector")), Usuarios = estructura(list(), class = c("collector_character", "collector")),...4 = estructura(list(), class = c("collector_logical", "collector"))), default = estructura(list(), class = c("collector_guess", "collector")), delim = ","), class = "col_spec"), problems = <pointer: 0x00000250d76dea50="">, class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"))

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el diagrama de barras se está trazando con el eje y comenzando en 0, mientras que el diagrama de líneas se está trazando con el eje y comenzando en un valor superior a 0. Esto puede hacer que el diagrama de líneas parezca mucho más empinado de lo que realmente es. Para solucionar esto, puede utilizar el parámetro ylim en ggplot() para establecer los límites del eje y para ambos diagramas en el mismo valor:

    ggplot(df) +
      geom_bar(aes(x = Year, y = Users), stat = "identity", fill = "grey70") +
      geom_line(aes(x = Year, y = Revenue, color = "yellow")) + 
      scale_color_manual(name = "Leyenda", labels = c("Valor en 100"), values = c("black")) +
      ylim(0, max(df$Users, na.rm = TRUE, finite = TRUE, finite.only = TRUE))
    

    Además, he agregado el parámetro stat = "identity" a geom_bar() para trazar los valores de Users directamente, en lugar de calcular el peso de cada barra utilizando weight = Users. También he realizado algunos pequeños cambios de formato para mayor consistencia (por ejemplo, usando color en lugar de colour).

Comments are closed.