Организуйте сетку в ggplot2 и исправьте ylabs для имени переменной

Я рисую все переменные с помощью ggplot2, причем метки оси Y являются именем переменной. Затем я размещаю графики ggplot в сетке.

Результирующий окончательный график содержит все меньшие участки, на которых реплицируется последний объект графика. Также я хотел бы, чтобы метки оси Y были правильно названы.

Ниже приведен код, который я использовал для этой цели.

require(ggplot2)
require(gridExtra)

data(iris)
plots = list()
for(i in 1:4){
  grf = qplot(x = 1:nrow(iris), y = iris[ ,i], 
              color = iris$Species, ylabs = colnames(iris)[i])
  plots = c(plots, list(grf))
}

do.call(grid.arrange, plots)

Я смиренно кланяюсь в углу, с нетерпением ожидая ответа от сообщества, гораздо более мудрого, чем я.

Изменить: забыл упомянуть, что мне нужны графики в списке для сохранения с использованием ggsave


person kay dee    schedule 23.01.2015    source источник


Ответы (1)


Я думаю, это то, о чем вы просите ... Обратите внимание, что вам нужно использовать функцию aes_string (), чтобы диаграммы отображались правильно

plots = list()
cols_to_plot <- colnames(iris)

for(i in 1:4){

  grf = ggplot(data = iris, aes_string(x = "1:nrow(iris)", y = cols_to_plot[i], color = "Species")) + 
    geom_point() +
    ylab(colnames(iris)[i])
  plots = c(plots, list(grf))
}    
do.call(grid.arrange, plots)

производит следующее:

введите описание изображения здесь

GGplot2 имеет действительно отличную функциональность (facet_wrap) для выполнения некоторых из тех вещей, которые вы, кажется, пытаетесь. Вам необходимо правильно организовать данные, чтобы извлечь из них выгоду (подумайте о «длинных и тонких данных»).

tidyr отлично справляется с формированием данных таким образом, чтобы их могли легко принять пакеты ggplot2 и ggvis.

вот что это показывает ...

grid_thingy

require(ggplot2)
require(tidyr) # to reshape the data
require(dplyr) # to add the column of rownumbers.  not really necessary at all

iris %>% 
  mutate(rowNum = 1:nrow(.)) %>% #add the column of row numbers
  gather(Measure, Value, -(Species:rowNum)) %>% #from tidyr package - this is what makes it long.  Read the help on `gather` and `spread`
  ggplot(aes(x = rowNum, y = Value, group = Species, color = Species)) +
  geom_point() +
  facet_wrap(~Measure, nrow = 2) # the nice n' easy part.  Automatically plops it in your four separate charts based on the "Measure" variable (which was created when I made the data "long" instead of "wide").
person colemand77    schedule 23.01.2015
comment
Еще одна приятная особенность второго метода - у вас есть один файл, готовый для ggsave (). - person colemand77; 23.01.2015
comment
Просто так прекрасно! Второй метод подходит для небольшого количества ковариат. Поскольку в наборе данных есть 30 тыс. Строк и 120 переменных для построения графика, графику на самом деле не удавалось разбить так много графиков, каждый из которых имеет такое количество точек данных. Тем не менее, у обоих методов есть место, которое нужно заполнить. Спасибо @ colemand77 за то, что нашли время и терпение, чтобы ответить на этот вопрос. - person kay dee; 23.01.2015
comment
Ах, извини, я сделаю это как можно скорее. - person kay dee; 23.01.2015