R 中的 ggplot2 和 spline() - 错误:`data` 必须是数据框,或其他可由 `fortify()` 强制的对象

ggplot2 & spline() in R - Error in : `data` must be a data frame, or other object coercible by `fortify()`

数据生成的可重现示例:

n <- 9
x <- 1:n
y <- rnorm(n)
data <- data.frame(x, y)

我知道如何在没有 ggplot2 的情况下使用样条曲线绘制数据。

plot(x, y, main = paste("spline[fun](.) "))
lines(spline(x, y))

此处提供绘图图像:

但是,我想用 ggplot2 绘制样条曲线。这是一个代码示例:

ggplot(aes(x = x, y = y)) + geom_point() + geom_line(spline(data))

我得到的错误是: 错误:data 必须是数据框,或其他可由 fortify() 强制的对象,而不是具有 class uneval 的 S3 对象 您是否不小心将 aes() 传递给了 data 参数?

如果我使用

也会抛出同样的错误
ggplot(aes(data, x = x, y = y)) + geom_point() + geom_line(spline(data))

ggplot(aes(x = x, y = y)) + geom_point() + geom_line(spline(x, y))

ggplot(aes(x = data$x, y = data$y)) + geom_point() + geom_line(spline(data$x,data$y))

下面给出了不同的错误。它在 here 中进行了探索,但我想绘制一条样条曲线,但不确定如何将解决方案应用于我的情况。

library(dplyr)
data %>% ggplot(aes(x = x, y = y)) + geom_point() + geom_line(spline(x, y))

错误:mapping 必须由 aes()

创建

可能的方法:

ggplot(data, aes(x = x, y = y)) + 
  geom_point() + 
  geom_line(data = data.frame(spline(x, y))) #+
  #ggthemes::theme_base()

问题是:spline returns list,你只需要将它转换成 data.frame 就可以了。