2015-09-08 78 views
2

如何平滑線條邊緣?我可以這樣做我的線情節:用樣條線連接點

data <- data.frame(x=1:10, y=c(22,23,21,25,23,24,20,27,22,24)) 
ggplot(data, aes(x,y)) + 
    geom_line(colour='forestgreen') 

但是,我不喜歡鋒利的邊緣。有沒有辦法通過這些點繪製線條以便線條平滑?

回答

3

這是做這件事:

library(ggplot2) 
library(splines) 
library(gridExtra) 

dat <- data.frame(x=1:10, y=c(22,23,21,25,23,24,20,27,22,24)) 

plot.new() # have to do this unfortunately 
res <- xspline(dat$x, dat$y, -0.25, draw=FALSE) 

gg1 <- ggplot(dat, aes(x,y)) + 
    geom_line(colour='forestgreen') + 
    geom_point() 

gg2 <- ggplot(data=data.frame(x=res$x, y=res$y), aes(x, y)) + 
    geom_point(data=dat, aes(x, y), size=1) + 
    geom_line(color="blue") 

grid.arrange(gg1, gg2, ncol=1) 

enter image description here

這是使用xspline做插值。查看函數,看看調整-0.25參數(範圍是-11)會做什麼。

+0

它的工作原理。現在我只需要找出處理缺失值的方法。我在各個地方都有許多缺失值的時間系列。我想我只需要將時間序列分成不同的塊,以便它們不包含缺失值並計算每個塊的樣條曲線。謝謝您的幫助! – Nso

+0

如果您願意使用ggplot2的github/devtools版本,我也將其封裝到一個包https://github.com/hrbrmstr/gggaldu中(以上pkg將會有更多ggplot2擴展) – hrbrmstr

+0

使https: //github.com/hrbrmstr/ggalt(新名稱) – hrbrmstr