varias superponer los linea grosor graficos grafico graficas ggplot etiquetas escala ejes como cambiar barras r ggplot2

los - superponer graficas en r ggplot



¿Cómo se puede superponer una línea en un diagrama de barras usando ggplot2? (2)

Quizás sus datos de muestra no sean representativos de los datos reales con los que está trabajando, pero no hay líneas que dibujar para df2 . Solo hay un valor para cada valor xey. Aquí hay una versión modificada de su df2 con suficientes puntos de datos para construir líneas:

df <- data.frame(grp=c("A","A","B","B","C","C"),val=c(1,2,3,1,2,3)) df2 <- data.frame(grp=c("A","A","B","B","C","C"),val=c(1,4,3,5,0,2)) p <- ggplot(df, aes(x=grp, y=val)) p <- p + geom_bar(stat="identity", alpha=0.75) p + geom_line(data=df2, aes(x=grp, y=val), colour="blue")

Alternativamente, si sus datos de ejemplo anteriores son correctos, puede trazar esta información como un punto con geom_point(data = df2, aes(x = grp, y = val), colour = "red", size = 6) . Obviamente puedes cambiar el color y el tamaño a tu gusto.

EDIT: en respuesta al comentario

No estoy del todo seguro de cómo se supone que debe ser el aspecto de un polinomio de frecuencia sobre un histograma. ¿Se supone que los valores x están conectados entre sí? En segundo lugar, sigues refiriéndote a querer líneas, pero tu código muestra geom_bar() que supongo que no es lo que quieres. Si quieres líneas, usa geom_lines() . Si las dos suposiciones anteriores son correctas, entonces hay un enfoque para hacer eso:

#First let''s summarise df2 by group df3 <- ddply(df2, .(grp), summarise, total = sum(val)) > df3 grp total 1 A 5 2 B 8 3 C 3 #Second, let''s plot df3 as a line while treating the grp variable as numeric p <- ggplot(df, aes(x=grp, y=val)) p <- p + geom_bar(alpha=0.75, stat = "identity") p + geom_line(data=df3, aes(x=as.numeric(grp), y=total), colour = "red")

Estoy buscando una forma de trazar un gráfico de barras que contenga dos series diferentes, esconder las barras para una de las series y en su lugar tener una línea (sin problemas si es posible) ir a la parte superior de las barras para las series ocultas ( similar a cómo se podría superponer un polinomio de frecuencia en un histograma). He intentado con el ejemplo a continuación, pero parece que se encuentra con dos problemas.

Primero, necesito resumir (totalizar) los datos por grupo, y segundo, me gustaría convertir una de las series (df2) en una línea.

df <- data.frame(grp=c("A","A","B","B","C","C"),val=c(1,1,2,2,3,3)) df2 <- data.frame(grp=c("A","A","B","B","C","C"),val=c(1,4,3,5,1,2)) ggplot(df, aes(x=grp, y=val)) + geom_bar(stat="identity", alpha=0.75) + geom_bar(data=df2, aes(x=grp, y=val), stat="identity", position="dodge")


Puede obtener totales de grupo de muchas maneras. Uno de ellos es

with(df, tapply(val, grp, sum))

Para simplificar, puede combinar datos de barras y líneas en un solo conjunto de datos.

df_all <- data.frame(grp = factor(levels(df$grp))) df_all$bar_heights <- with(df, tapply(val, grp, sum)) df_all$line_y <- with(df2, tapply(val, grp, sum))

Los gráficos de barras usan un eje x categórico. Para superponer una línea, necesitará convertir el eje en numérico.

ggplot(df_all) + geom_bar(aes(x = grp, weight = bar_heights)) + geom_line(aes(x = as.numeric(grp), y = line_y))