Циклический просмотр столбцов с помощью 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)
}