Фильтровать геометрические линии из ggplot в R?

#r #ggplot2

#r #ggplot2

Вопрос:

У меня есть график, отображающий geom_line s, которые рисуются несколько раз. Игрушечный пример показан ниже. Мне было интересно, возможно ли отфильтровать некоторые из этих строк из ggplot . Я попытался выполнить подмножество данных перед построением графика, но поскольку то, что я пытаюсь отобразить (т. Е. ice1 В приведенном ниже коде), является странным объектом R6, я не уверен, как подмножество или выборка из него …. и я не могу подмножество из основного набора данных (в данном случае, бостонских данных).

По сути, я пытаюсь найти способ не отображать так много geom_line s на графике.

 library("iml") 
library("randomForest") 
library(ggplot2)

# We train a random forest on the Boston dataset: 
data("Boston", package = "MASS") 
rf = randomForest(medv ~ ., data = Boston, ntree = 50) 
mod = Predictor$new(rf, data = Boston)

#create ICE curves
ice1 <- FeatureEffect$new(mod, method = 'pdp ice', feature = "rm")
# get the aggregate 
aggr <- ice1$results[ice1$results$.type != "ice", ]

# create plot object
pp <-  plot(ice1, rug=FALSE) 
# plot
pp     geom_line(aes(y = .value, group = .id, color = .value))    
geom_line(data = aggr, size = 2, color = "black", lineend = "round")
  

Это приводит к чему-то вроде этого:
введите описание изображения здесь

Ответ №1:

Вы можете назначить вывод обратно ice1$results после подмножества. Это то, что вы ищете?

 ice1$results <- ice1$results[ice1$results$.type != "ice", ]
  

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

1. Не совсем… Итак, на графике рисуется что-то вроде 10000 строк. Я пытаюсь эффективно подмножество, так что есть только, скажем, 10 или 20 нарисованных строк. Я пытался сделать что-то вроде этого: ice1$results <- ice1$results[seq(1, length(ice1$results$rm), 100), ] … но это не работает… скорее всего, потому, что я неправильно его индексирую .. если вы проверите ice1$results$rm , оно уменьшится до 100 наблюдений (из 10 000), но оно повторяет только 1-е значение

2. Какие 10 или 20 строк вы хотите подмножествовать?

3. В моем предыдущем комментарии я пытался удалить строки от 1 до 10 000 на 100. Что-то подобное было бы идеальным, поскольку оно все равно показывало бы (вертикальный) диапазон

4. В вашем предыдущем комментарии вы выбирали строки от 1 до 10 000 на 100, и это то, что ice1$results есть, но вы говорите, что это не работает. Итак, мне все еще не ясно, чего вы хотите.

5. это не работает, потому что, если вы проверяете ice1$results$rm после использования seq , это всего лишь 1-е значение, повторяемое 100 раз…. не 100 разных значений