ggplot2 & spline () в R - Ошибка в: `data` должен быть фреймом данных или другим объектом, который можно принудительно вызвать с помощью` fortify () ` - PullRequest
0 голосов
/ 01 марта 2019

Воспроизводимый пример для генерации данных:

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))

изображение графика доступно здесь:

enter image description here

Однако, Я хочу построить сплайн с помощью ggplot2 .Вот пример кода:

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

Ошибка, которую я получаю: Ошибка: data должен быть фреймом данных или другим объектом, который можно изменить с помощью fortify(), а не объектом 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))

Следующая ошибка дает другую ошибку.Он был исследован в здесь , но я хочу построить сплайн и не уверен, как применить решение к моей ситуации.

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

Ошибка: mapping должен быть созданaes()

1 Ответ

0 голосов
/ 01 марта 2019

Возможный способ сделать это:

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

54942745

Проблема в том, что spline возвращает list, вам просто нужно преобразоватьэто в data.frame и все.

...