R小tip(二) ggplot曲线图画法

这几天解决了个好玩的东西,用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()
image.png

那么我想用平滑的曲线连接它们怎么办呢?
我们先看看line()的效果

ggplot(ab,aes(x = ab$a,y = ab$b)) + geom_point() + geom_line()
image.png

可以画,但不够平滑

我们再来看看smooth能不能解决:

ggplot(ab,aes(x = ab$a,y = ab$b)) + geom_point() + stat_smooth(method="loess")
image.png

显然是不行的,但我们可以采取一种近似的方式完成它,利用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()
image.png

我们看一下abab是什么样子:


image.png

其实就是做了10000次的细分

你可能感兴趣的:(R小tip(二) ggplot曲线图画法)