varias tutorial superponer los leyendas graficas ggplot etiquetas español escala ejes como cambiar r ggplot2 legend facet facet-wrap

tutorial - superponer graficas en r ggplot



Coloque una leyenda para cada cuadrícula facet_wrap en ggplot2 (3)

En lugar de usar facetas, podríamos hacer una lista de parcelas por grupo y luego utilizar cowplot :: plot_grid para trazar. Cada uno tendrá su propia leyenda:

# make list of plots ggList <- lapply(split(x, x$Server), function(i) { ggplot(i, aes(Date, PercentUsed, group = 1, colour = FileSystem)) + geom_jitter(size = 2) + geom_smooth(method = "loess", se = TRUE)}) # plot as grid in 1 columns cowplot::plot_grid(plotlist = ggList, ncol = 1, align = ''v'', labels = levels(x$Server))

Según lo sugerido por @Axeman, podríamos agregar etiquetas usando facet_grid(~Server) , en lugar de labels = levels(x$Server) .

Tengo este marco de datos:

Date Server FileSystem PercentUsed 1 12/1/2011 A / 60 2 1/2/2012 A /var 50 3 2/1/2012 A tmp 90 4 2/10/2012 A /db 86 5 2/13/2012 A /app 90 6 12/1/2011 B C: 67 7 1/2/2012 B D: 67 8 2/1/2012 B F: 34 9 2/10/2012 B /restore 89 10 2/13/2012 B G: 56 11 12/1/2011 C / 90 12 1/2/2012 C /tmp 78 13 2/1/2012 C /data 67 14 2/10/2012 C /Storage 34 15 2/13/2012 C /database 12 dput(x) structure(list(Date = structure(c(2L, 1L, 3L, 4L, 5L, 2L, 1L, 3L, 4L, 5L, 2L, 1L, 3L, 4L, 5L), .Label = c("1/2/2012", "12/1/2011", "2/1/2012", "2/10/2012", "2/13/2012"), class = "factor"), Server = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L), .Label = c("A", "B", "C"), class = "factor"), FileSystem = structure(c(1L, 9L, 14L, 5L, 2L, 10L, 11L, 12L, 6L, 13L, 1L, 8L, 3L, 7L, 4L), .Label = c("/", "/app", "/data", "/database", "/db", "/restore", "/Storage", "/tmp", "/var", "C:", "D:", "F:", "G:", "tmp"), class = "factor"), PercentUsed = c(60L, 50L, 90L, 86L, 90L, 67L, 67L, 34L, 89L, 56L, 90L, 78L, 67L, 34L, 12L)), .Names = c("Date", "Server", "FileSystem", "PercentUsed"), class = "data.frame", row.names = c(NA, -15L))

Me gustaría poner una leyenda al lado de cada cuadrícula facet_wrap , su propio sistema de FileSystem :

Cuando hago esto, coloca la leyenda al lado de la trama para todo el sistema de FileSystem . ¿Es posible poner FileSystem a cada servidor al lado de cada grilla?

ggplot(x, aes(Date, PercentUsed, group=1, colour=FileSystem)) + geom_jitter(size=0.5) + geom_smooth(method="loess", se=T) + facet_wrap(~Server, ncol=1)


La mejor manera de hacerlo es con el paquete gridExtra :

library(gridExtra) xs <- split(x,f = x$Server) p1 <- ggplot(xs$A,aes(x = Date,y = PercentUsed,group = 1,colour = FileSystem)) + geom_jitter(size=0.5) + geom_smooth(method="loess", se=T) + facet_wrap(~Server, ncol=1) p2 <- p1 %+% xs$B p3 <- p1 %+% xs$C grid.arrange(p1,p2,p3)


Meh, @joran me venció (mi gridExtra estaba fuera de fecha pero me tomó 10 minutos darme cuenta). Aquí hay una solución similar, pero ésta le permite al gato generarse genéricamente por niveles en el Server .

library(gridExtra) out <- by(data = x, INDICES = x$Server, FUN = function(m) { m <- droplevels(m) m <- ggplot(m, aes(Date, PercentUsed, group=1, colour = FileSystem)) + geom_jitter(size=2) + geom_smooth(method="loess", se=T) }) do.call(grid.arrange, out) # If you want to supply the parameters to grid.arrange do.call(grid.arrange, c(out, ncol=3))