Как мне прокрутить имена столбцов и сделать 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)
}
Другие вопросы по тегам