Извлечение определенного количества точек данных из гладкой кривой

#r #ggplot2 #shiny #plotly

#r #ggplot2 #блестящий #построение

Вопрос:

У меня есть набор df данных, с помощью которого я строю диаграмму рассеяния. Ниже приведен код для этого:

  g <- ggplot()   theme_bw()  
                geom_point(data = df, aes_string(df[,1], df[,2]), color = 'red') 
                geom_smooth(data = df, aes_string(df[,1], df[,2]),formula = y ~ splines::bs(x, df = input$degree_1), method = "lm", color = "green3", level = 1, size = 0.5)
  

input$degree_1 является ползунком для изменения степени полиномиальной подгонки.

Во-вторых, я извлекаю точки данных кривой сглаживания следующим образом:

 r <- ggplot_build(g)$data[[2]]
  

Теперь я хочу вырезать эту сглаженную кривую, используя две вертикальные линии, и извлечь точки данных кривой, лежащие между этими двумя линиями:

 v_f1 <- subset(r, x > input$Vert1 amp; x < input$Vert2, select = c(x,y))
  

input$Vert1 и input$Vert2 являются ползунками для изменения положения вертикальных линий.

Что я хочу: я хочу иметь возможность контролировать количество точек, которые получают подмножество и извлекаются в вышеупомянутой команде по этим вертикальным линиям.

введите описание изображения здесь

На данный момент он извлекает случайное количество точек, я хочу, чтобы пользователь мог это контролировать. Например, если я хочу вырезать этот профиль и извлечь 100 точек в одном случае и 120 точек в другом случае и так далее. Или я мог бы просто установить номер исправления для всех случаев.

Комментарии:

1. Установите модель снаружи ggplot и используйте predict .

2. Не могли бы вы, пожалуйста, немного уточнить?

3. @kolas0202 Пожалуйста, уточните также, как вы хотите использовать свои точки. Должны ли они быть равномерно распределены вдоль оси x (одинаковый dx) или вдоль кривой (одинаковый ds)?

4. x <- seq(from = ..., to = ..., length.out = ...); fit <- lm(y ~ splines::bs(x, df = input$degree_1), data = df); y <- predict(fit, newdata = data.frame(x = x))

5. @billy34 Я хочу выбрать свои точки таким образом, чтобы они были равномерно распределены вдоль кривой, т.Е. Одинаковые ds.