这几天解决了个好玩的东西,用ggplot画穿过点的曲线
一般ggplot的smooth只有拟合的作用,往往达不到我们的要求
那么我们怎么做呢?
比方说我有两列数据a,b
a = c(1,2,3,4,5,6,7,8,9,10,11)
b = c(3,6,2,6,7,4,2,1,1,3,4)
ab = data.frame(a = c(1,2,3,4,5,6,7,8,9,10,11),
b = c(3,6,2,6,7,4,2,1,1,3,4))
ggplot(ab,aes(x = ab$a,y = ab$b)) + geom_point()
那么我想用平滑的曲线连接它们怎么办呢?
我们先看看line()的效果
ggplot(ab,aes(x = ab$a,y = ab$b)) + geom_point() + geom_line()
可以画,但不够平滑
我们再来看看smooth能不能解决:
ggplot(ab,aes(x = ab$a,y = ab$b)) + geom_point() + stat_smooth(method="loess")
显然是不行的,但我们可以采取一种近似的方式完成它,利用spline()这个函数
point = spline(a,b,1000)
abab = data.frame(point$x,point$y)
ggplot(abab,aes(x = abab$point.x,y = abab$point.y)) + geom_point()
我们看一下abab是什么样子:
其实就是做了10000次的细分