#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 разных значений