我正在研究最后两点不是最新的情节。由此产生的低数字使我的平滑线下降。
dat1<-data.frame(vals=c(30,40,50,30,40,50,30,10,5),
q.year=c("q1 09", "q2 09", "q3 09", "q4 09", "q1 10", "q2 10", "q3 10", "q4 10", "q1 11"),
dummy=rep("g1", 9)
)
dat1$q.year<-factor(dat1$q.year, unique(dat1$q.year))
ggplot(dat1, aes(x=q.year, y=vals, group=dummy))+
geom_point()+
geom_line()+
geom_smooth(method="loess", se=FALSE, lty=2)
我想在没有两个低点的情况下绘制更平滑的画面。我可以用一个子集来做到这一点:
gg1<-ggplot(dat1, aes(x=q.year, y=vals, group=dummy))+
geom_point()+
geom_line()+
geom_smooth(data=subset(dat1, q.year %in% levels(q.year)[1:7]),
method="loess", se=FALSE, lty=2)
print(gg1)
但是,当重新使用新数据(即gg2&lt; - gg1%+%someMoreData)时,我必须添加另一行来对新数据集(someMoreData)进行子集化。
有更好的方法吗?我可以参考已经传入情节的数据吗?
如果问题不是很清楚,请道歉 - 如果需要,将会更新
由于
答案 0 :(得分:2)
fun <- function(val,fac,n) {val[fac %in% tail(levels(fac),n)] <- NA; val}
gg1a <- ggplot(dat1, aes(x=q.year, y=vals, group=dummy))+
geom_point()+
geom_line()+
geom_smooth(aes(x=q.year,y=fun(vals,q.year,2)),
method="loess", se=FALSE, lty=2)
print(gg1a)
#Warning message:
#Removed 2 rows containing missing values (stat_smooth).
dat2<-data.frame(vals=c(50,40,50,30,40,50,30,10,5,5),
q.year=c("q1 09", "q2 09", "q3 09", "q4 09", "q1 10", "q2 10", "q3 10", "q4 10", "q1 11","q2 11"),
dummy=rep("g1", 10)
)
#make sure that your factor is ordered,
#otherwise it gets reordered by ggplot according to levels
dat2$q.year <- factor(as.character(dat2$q.year),levels=as.character(dat2$q.year),ordered = TRUE)
gg1a %+% dat2
#Warning message:
#Removed 2 rows containing missing values (stat_smooth).