我想将一些数据作为群体的一种手段随时间变化,每条群体的线路连接不同的平均时间点。
这个代码是:
line<-ggplot(dat, aes(Time, Cortisol.ngmL, shape=T))
line+
stat_summary(fun.y=mean, geom="point", size=4, aes(group=T))+
stat_summary(fun.y=mean, geom="line", aes(group=T), linetype="dashed", lwd=0.7)
但是......我想记录y轴(log10)。当我这样做时,连接组的时间线变得弯曲(下面的代码)
line<-ggplot(dat, aes(Time, Cortisol.ngmL, shape=T))
line+
stat_summary(fun.y=mean, geom="point", size=4, aes(group=T))+
stat_summary(fun.y=mean, geom="line", aes(group=T), linetype="dashed", lwd=0.7)+
coord_trans(y="log10")
有没有人知道我可以使用对数刻度和直线的方法?
答案 0 :(得分:1)
我使用此功能以对数刻度连接点与直线:
log_line <- function(x, y, n = 1000) {
l <- lapply(2:length(x),
function(i, n) {
xl <- seq(x[i - 1], x[i], (x[i] - x[i - 1]) / n)
yl <- exp(log(y[i]) + (xl - x[i]) * (log(y[i]) - log(y[i - 1])) / (x[i] - x[i - 1]))
return(data.frame(x = xl, y = yl))
},
n)
return(do.call(rbind, l))
}
参数是您想要用对数刻度中的直线连接的点的x和y坐标,以及要在每对原始点之间预测的n个点。
此函数在每个点之间以对数刻度拟合直线,预测两个原始点之间的新点,然后将它们转换回原始刻度。输出是具有预测值x和y坐标的数据帧。
可以轻松添加到ggplot中:
v1 <- 1:10
v2 <- exp(-v1)
ggplot() +
geom_point(aes(v1, v2)) +
geom_line(aes(x, y), data = log_line(v1, v2)) +
coord_trans(y = "log")