RL oop через группу столбцов, чтобы сделать несколько графиков - PullRequest
0 голосов
/ 29 мая 2020

Мне нужно сделать несколько диаграмм рассеяния из некоторых столбцов в моем фрейме данных, поэтому я решил сделать al oop, но я не знаю, как настроить его на итерацию только для моих столбцов интерес. мой код выглядит так:

col_xVScol_y<-ggplot(data=df, aes(x=col_x, y=col_y)) + 
geom_point(aes(color= col_z))

col_y и col_z всегда будут одинаковыми, мне просто нужно перебрать группу столбцов, которые займут место col_x

Я видел, что вы можете перебирать столбцы с помощью colnames (), например:

for(i in colnames(df)){
    col_xVScol_y<-ggplot(data=df, aes(x=col_x, y=col_y)) + 
    geom_point(aes(color= col_z))]
}

Но этот способ не подходит для моего фрейма данных, потому что он повторяется по всем столбцам, и меня интересует только группа.

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

В качестве альтернативы вы можете изменить форму фрейма данных, используя pivot_longer из пакета tidyr, так, чтобы все ваши col_x столбцы (при условии, что они имеют уникальные имена столбцов) были сложены в категориальный столбец и связанный values столбец. Таким образом, вы можете использовать facet_wrap в своем ggplot и создать фасетную диаграмму, которая создает отдельные диаграммы разброса для каждой комбинации.

library(dplyr)
library(tidyr)
library(ggplot2)

    data <- mtcars %>%
  select(mpg, cyl, disp, hp, wt) %>%
  pivot_longer(cols = c("mpg", "disp", "hp"),
               names_to = "Columns",
               values_to = "Values") 

ggplot(data = data, aes(x = Values, y = wt, colour = as.factor(cyl))) +
         geom_point() +
         facet_wrap(. ~ Columns)

Выглядит так: enter image description here

0 голосов
/ 29 мая 2020

Вместо итерации с использованием i вы можете выполнять итерацию с использованием имен столбцов, как показано ниже. Вызов grid.arrange () из gridExtra предназначен только для построения всех графиков на одном графикеi c - вы можете строить их, как хотите (я считаю, что хранить их в списке удобно).

Приведенный ниже код выполняет итерацию только по некоторым столбцам mtcars. Вы можете настроить это как хотите (создав соответствующий вектор имен столбцов или индексов).

plot_list <- list()

for(col in colnames(mtcars)[c(9:11)]){

  col_xVScol_y <- ggplot(data=mtcars, aes(x=wt, y=mpg)) + 
                  geom_point(aes_string(color = col)) 

  plot_list[[col]] <- col_xVScol_y
}

print(plot_list)

# library(gridExtra)
# grid.arrange(grobs = plot_list)

Вывод вышеуказанного кода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...