Циклический просмотр столбцов с помощью ggplot и modyfing geom_hline(yintercept) соответственно

Это дополнительный вопрос, который относится непосредственно к этой теме:

Как мне прокрутить имена столбцов и сделать scgtep ggplot для каждого

Я хотел бы пройтись по именам столбцов и создать scatteplot ggplot для каждого, но я хочу добавлять каждый раз горизонтальную линию, перехват которой зависит от значений в столбце.

Итак, я беру этот код:

Y <- rnorm(100)
df <- data.frame(A = rnorm(100), B = runif(100), C = rlnorm(100),
                 Y = Y)
colNames <- names(df)[1:3]
for(i in colNames){
  plt <- ggplot(df, aes_string(x=i, y = Y)) +
    geom_point(color="#B20000", size=4, alpha=0.5) +
    geom_hline(yintercept=0, size=0.06, color="black") + 
    geom_smooth(method=lm, alpha=0.25, color="black", fill="black")
  print(plt)
  Sys.sleep(2)
}

Я переключаюсь у с х

aes_string(x=Y, y = i))

и я хочу изменить эту строку

geom_hline(yintercept=0, size=0.06, color="black")

... так что yintercept не является постоянным, но зависит от меня, например:

geom_hline(yintercept=c(quantile(i, 0.25)))

Так что унтерцепт всегда является первым квартилем моей колонны.

Тем не менее, это не работает:

Ошибка в (1 - h) * qs[i]: нечисловой аргумент для бинарного оператора

Я пробовал разные варианты, такие как aes_string, paste() и т. Д., Но ничего из этого не сработало.

Однако это не работает: ошибка в (1 - h) * qs[i]: нечисловой аргумент бинарного оператора

Я пробовал разные варианты, такие как aes_string, paste() и т. Д., Но ничего из этого не сработало.

1 ответ

Вам следует позвонить quantile(df[,i], 0.25) вместо quantile(i, 0.25) и это должно работать, ваш код будет:

for(i in colNames){
  plt <- ggplot(df, aes_string(x=Y, y = i)) +
    geom_point(color="#B20000", size=4, alpha=0.5) +
    geom_hline(yintercept=c(quantile(df[,i], 0.25)))+
    geom_smooth(method=lm, alpha=0.25, color="black", fill="black")
  print(plt)
  Sys.sleep(2)
}
Другие вопросы по тегам