Извлечь отдельный график из ggplot с помощью facet_grid

#r #ggplot2 #facet

#r #ggplot2 #фасет

Вопрос:

Я хочу создать несколько графиков, используя ggplot и facet_grid , и сохранить график как объект. Моя проблема в том, что я также хочу сохранить каждую подгруппу (т. Е. каждый аспект) как объект отдельно. Теперь мой вопрос в том, можете ли вы извлечь один аспект из facet_grid и сохранить его как объект? Вот несколько простых кодов:

 library(ggplot2)

ggplot(data = mtcars, aes(x = disp, y = mpg))  
  geom_point()  
  facet_grid(. ~ am)
  

Теперь я хотел бы создать два объекта — один для am=0 и один для am=1 .

Ответ №1:

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

 library(ggplot2)
library(grid)
library(gtable)

p1 = ggplot(data = mtcars, aes(x = disp, y = mpg))  
  geom_point()  
  facet_grid(. ~ am)


g1 = ggplotGrob(p1)


# Rows and columns can be dropped from the layout.

# To show the layout:
gtable_show_layout(g1)

# Which columns (and/or rows) to drop?
# In this case drop columns 5 and 6 to leave am = 0 plot
# Drop columns 4 and 5 to leave am = 1 plot

# am = 0 plot
g1_am0 = g1[,-c(5,6)]

grid.newpage()
grid.draw(g1_am0)


# am = 1 plot
g1_am1 = g1[,-c(4,5)]

grid.newpage()
grid.draw(g1_am1)
  

Ответ №2:

Вы могли бы подмножествовать свои данные при вводе и удалить команду facet.

 ggplot(data = subset(mtcars,am==0), aes(x = disp, y = mpg))  
    geom_point() 

ggplot(data = subset(mtcars,am==1), aes(x = disp, y = mpg))  
    geom_point() 
  

Я понял, что не ответил на ваш вопрос о сохранении в качестве объекта.
Перед кодом ggplot добавьте строку :

 tiff(file="firstfolder from working dir/next folder/ name.tiff",units="in",width=5,height=6,res=72)
  

Вам нужно будет добавить dev.off() после кода графика, чтобы материал снова отображался на экране вашего компьютера.

Вы можете использовать png, pdf и т.д. для разных форматов.

Если это только один вариант и вы используете RStudio, вы можете экспортировать вручную из окна графика. Смотрите кнопку экспорта над ним.

Комментарии:

1. Большое спасибо! Я действительно знаю о поднаборе, но мне было интересно, есть ли элегантный способ просто извлечь графики из facet_grid. Мне это интересно, потому что графики очень сложные (отсюда и длинный код), и я хочу, чтобы код был как можно более простым..

2. Насколько я знаю о @ehi, кроме моментальных снимков или обрезки, ничего другого

3. Проблема с моментальными снимками заключается в том, что нет отдельной метки масштаба и оси y..