#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.