superponer - El gráfico de líneas ggplot2 proporciona "geom_path: cada grupo consta de una sola observación. ¿Necesitas ajustar la estética del grupo?
superponer graficas en r ggplot (4)
Con este marco de datos ("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 obtengo es:
geom_path: cada grupo consta de una sola observación. ¿Necesitas ajustar la estética del grupo?
El gráfico aparece como un diagrama 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 convirtiera el año en una variable de factor.
Lo hice y el problema persiste.
Esta es la salida 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")
Inicie R en una nueva sesión y péguelo 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")
Obtiene este error porque una de sus variables es en realidad una variable de factor. Ejecutar
str(df)
para comprobar esto Luego haga este cambio de doble variable para mantener los números del 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 "matriz" que podría causar el pb. Intenta entonces:
df <- data.frame(apply(df, 2, unclass))
y trama de nuevo?
Solo tiene que agregar
group = 1
en ggplot o geom_line aes ().
Para los gráficos de líneas, los puntos de datos deben agruparse 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 las líneas generalmente se realiza por variable.
Referencia: Cookbook for R, Capítulo: Gráficos Bar_and_line_graphs_ (ggplot2), Gráficos lineales.
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")
Tuve un problema similar con el marco de datos:
group time weight.loss
1 Control wl1 4.500000
2 Diet wl1 5.333333
3 DietEx wl1 6.200000
4 Control wl2 3.333333
5 Diet wl2 3.916667
6 DietEx wl2 6.100000
7 Control wl3 2.083333
8 Diet wl3 2.250000
9 DietEx wl3 2.200000
Creo que la variable para el eje x debería ser numérica, de modo que geom_line sepa cómo conectar los puntos para dibujar la línea.
después de cambiar la segunda columna a numérica:
group time weight.loss
1 Control 1 4.500000
2 Diet 1 5.333333
3 DietEx 1 6.200000
4 Control 2 3.333333
5 Diet 2 3.916667
6 DietEx 2 6.100000
7 Control 3 2.083333
8 Diet 3 2.250000
9 DietEx 3 2.200000
entonces funciona