Вопрос

Я строю группу кривых, используя 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 )
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top