ggplot2中的每个面板平滑

Posted

技术标签:

【中文标题】ggplot2中的每个面板平滑【英文标题】:Per panel smoothing in ggplot2 【发布时间】:2010-12-13 21:06:11 【问题描述】:

我正在绘制一组曲线,使用 ggplot2 中的 facet。我希望将平滑器应用于有足够点进行平滑的绘图,但不适用于具有很少点的绘图。特别是当其中一个面板只有 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 )

【问题讨论】:

你检查过这个问题了吗? ***.com/questions/1570379/… 是的。将数据的子集提供给平滑器并不容易,因为它将被分面 - 我必须弄清楚哪些方面有足够的数据,然后从原始数据中仅对这些方面进行子集化。着色不起作用,因为我正试图阻止更平滑的运行 请提供一个可重现的小例子 a 糟糕,这不起作用,我已将其添加到问题中 【参考方案1】:

试试这个

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 )

【讨论】:

太棒了!我以前没有使用过 ddply,也没有向 geoms 提供不同的数据。这打开了一个充满可能性的世界。谢谢!

以上是关于ggplot2中的每个面板平滑的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 ggplot2 geom_raster 中的插值/平滑

R语言可视化包ggplot2绘制平滑曲线回归线实战:geom_smooth() 函数

R语言使用ggplot2包的快速可视化函数qplot绘制散点图(添加平滑曲线与标准差带)实战

在多面板ggplot2中标记各个面板

ggplot2中的角标签

R语言可视化包ggplot2包使用facet_wrap绘制多面板图(子图)实战