El gráfico de líneas ggplot2 da “geom_path: cada grupo consiste de una sola observación. ¿Necesita ajustar la estética del grupo?

Con este dataframe (“df”):

year pollution 1 1999 346.82000 2 2002 134.30882 3 2005 130.43038 4 2008 88.27546 

Intento crear un gráfico de líneas como este:

  plot5 <- ggplot(df, aes(year, pollution)) + geom_point() + geom_line() + labs(x = "Year", y = "Particulate matter emissions (tons)", title = "Motor vehicle emissions in Baltimore") 

El error que recibo es:

geom_path: cada grupo consiste en solo una observación. ¿Necesita ajustar la estética del grupo?

El gráfico aparece como un gráfico de dispersión aunque quiero un gráfico de líneas. Traté de reemplazar geom_line() con geom_line(aes(group = year)) pero eso no funcionó.

En una respuesta, me dijeron que debía convertir el año en una variable de factor. Lo hice y el problema persiste. Este es el resultado de str(df) y dput(df) :

 'data.frame': 4 obs. of 2 variables: $ year : num 1 2 3 4 $ pollution: num [1:4(1d)] 346.8 134.3 130.4 88.3 ..- attr(*, "dimnames")=List of 1 .. ..$ : chr "1999" "2002" "2005" "2008" structure(list(year = c(1, 2, 3, 4), pollution = structure(c(346.82, 134.308821199349, 130.430379885892, 88.275457392443), .Dim = 4L, .Dimnames = list( c("1999", "2002", "2005", "2008")))), .Names = c("year", "pollution"), row.names = c(NA, -4L), class = "data.frame") 

Solo tiene que agregar group = 1 en ggplot o geom_line aes ().

Para los gráficos de líneas, los puntos de datos deben estar agrupados para que sepa qué puntos conectar. En este caso, es simple: todos los puntos deben estar conectados, por lo que group = 1. Cuando se usan más variables y se dibujan varias líneas, la agrupación de líneas generalmente se realiza por variable.

Referencia: Libro de cocina para R, Capítulo: Gráficos Bar_and_line_graphs_ (ggplot2), Gráficos de líneas.

Prueba esto:

 plot5 <- ggplot(df, aes(year, pollution, group = 1)) + geom_point() + geom_line() + labs(x = "Year", y = "Particulate matter emissions (tons)", title = "Motor vehicle emissions in Baltimore") 

Obtiene este error porque una de sus variables es en realidad una variable de factor. Ejecutar

 str(df) 

para verificar esto Luego haga este doble cambio de variable para mantener los números de año en lugar de transformarlos en números de nivel “1,2,3,4”:

 df$year <- as.numeric(as.character(df$year)) 

EDITAR: parece que su data.frame tiene una variable de clase "array" que podría causar el pb. Prueba entonces:

 df <- data.frame(apply(df, 2, unclass)) 

y plto

Inicie R en una sesión nueva y péguela en:

 library(ggplot2) df <- structure(list(year = c(1, 2, 3, 4), pollution = structure(c(346.82, 134.308821199349, 130.430379885892, 88.275457392443), .Dim = 4L, .Dimnames = list( c("1999", "2002", "2005", "2008")))), .Names = c("year", "pollution"), row.names = c(NA, -4L), class = "data.frame") df[] <- lapply(df, as.numeric) # make all columns numeric ggplot(df, aes(year, pollution)) + geom_point() + geom_line() + labs(x = "Year", y = "Particulate matter emissions (tons)", title = "Motor vehicle emissions in Baltimore")