Как мне прокрутить имена столбцов и сделать scgtep ggplot для каждого
У меня есть датафрейм filter
, который является подмножеством кадра данных df2
, который был сделан с dyplr mutate()
функция.
Я хочу пройтись по некоторым столбцам и сделать из них диаграммы рассеяния.
Моя петля:
colNames <- names(filter)[9:47]
for(i in colNames){
ggplot(filter, aes(x=i, y=CrimesPer10k)) +
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")
}
Тем не менее я не получаю ни вывода, ни каких-либо ошибок.
Что я делаю неправильно?
2 ответа
Решение
Вам нужно явно print()
объект, возвращенный ggplot()
в for
цикл, потому что автоprint()
там выключено (и несколько других мест).
Вы также должны использовать aes_string()
на месте aes()
потому что вы не используете i
в качестве фактической переменной в filter
но как символьная строка, содержащая переменную (в свою очередь) в filter
быть построенным
Вот пример, реализующий оба из них:
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() устарела в ggplot2 > 3.0.0, но .data[[]] можно использовать.
colNames <- names(filter)[9:47]
for(i in colNames){
plt <- ggplot(filter, aes(x=.data[[i]], y=CrimesPer10k)) +
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)
}