Сглаживание для каждой панели в ggplot2
Вопрос
Я строю группу кривых, используя facet в ggplot2.Я бы хотел, чтобы сглаживание применялось к участкам, где достаточно точек для сглаживания, но не к участкам с очень небольшим количеством точек.В частности, я хотел бы остановить сбой графика, когда на одной из панелей есть только 1 или 2 точки.
Пример:
a <- data.frame( x=1:100, y=sin(seq(0.1,10,0.1) ))
b <- data.frame( x=1:5, y=sin(seq(0.1,0.2,0.1) ))
l <- melt(list(a=a,b=b),id.vars="x")
qplot( x, value, data=l ) + geom_smooth() + facet_wrap( ~ L1 )
Решение
Попробуй это
library(ggplot2)
a <- data.frame( x=1:100, y=sin(seq(0.1,10,0.1) ))
b <- data.frame( x=1:2, y=sin(seq(0.1,0.2, length = 2) ))
l <- melt(list(a=a,b=b),id.vars="x")
more_than <- function(n) {
function(df) {
if (nrow(df) > n) {
df
}
}
}
lbig <- ddply(l, "L1", more_than(5))
qplot( x, value, data=l ) + geom_smooth() + facet_wrap( ~ L1 )
qplot( x, value, data=l ) + geom_smooth(data = lbig) + facet_wrap( ~ L1 )
Не связан с StackOverflow