Одна из возможностей сглаживания линии - сделать сигмовидную кривую между каждой парой точек. Поскольку вы не предоставили данные в формате, который легко скопировать, давайте составим некоторые фиктивные данные следующим образом:
df <- data.frame(
x = 1:20,
y = rep(c(-1, 1), 10) * 1:20
)
ggplot(df, aes(x, y)) +
geom_line()
Из этого вы можете сделать сигмовидную кривую следующим образом:
sigmoid <- cbind(head(df, -1), tail(df, -1))
names(sigmoid)[3:4] <- c("xend", "yend")
sigmoid <- apply(sigmoid, 1, function(dat) {
x <- seq(dat[["x"]], dat[["xend"]], length.out = 10)
A <- dat[["y"]]
K <- dat[["yend"]]
B <- 10
C <- 1
mid <- mean(c(dat[["x"]], dat[["xend"]]))
y <- A + (K - A) / (C + exp(-B * (x - mid)))
data.frame(x = x, y = y)
})
sigmoid <- do.call(rbind, sigmoid)
Не стесняйтесь изменять параметры B и C в соответствии с вашими данными. Взгляните на связанную страницу википедии выше для объяснения параметров.
Теперь график будет выглядеть следующим образом в сочетании с входными данными:
ggplot(df, aes(x, y)) +
geom_line() +
geom_line(data = sigmoid, colour = "red")
Чтобы не сбивать людей с вашего графика, я рекомендую включать фактические измерения в виде точек на графике.