问题
I want to produce some plots using ggplot and facet_grid
and save the plot as an object. My problem is that I also want to save each subgroup (i.e. each facet) as an object separately. My question is now if you can extract a single facet from facet_grid
and save it as an object? Here is some simple code:
library(ggplot2)
ggplot(data = mtcars, aes(x = disp, y = mpg)) +
geom_point() +
facet_grid(. ~ am)
Now I'd like to produce two objects - one for am=0
and one for am=1
.
回答1:
I'm not sure why you wouldn't use subsetting, but you can extract individual facets from a facet grid.
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:
You could subset your data on way in and remove the facet command.
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()
I realized I didn't answer your question about saving as object. Before the ggplot code add a line :
tiff(file="firstfolder from working dir/next folder/ name.tiff",units="in",width=5,height=6,res=72)
You will need to add dev.off()
after the plot code to see stuff print to your computer screen again.
You can use png, pdf, etc...for different formats.
If it is just a one off, and you are using RStudio, you can export manually from the plot window. See Export button above it.
来源:https://stackoverflow.com/questions/40218814/extract-single-plot-from-ggplot-with-facet-grid