使用facet_grid从ggplot中提取单个图

时间:2016-10-24 12:45:13

标签: r ggplot2 facet

我想使用ggplot和facet_grid生成一些图并将图保存为对象。我的问题是我还想将每个子组(即每个facet)分别保存为一个对象。我现在的问题是,您是否可以从library(ggplot2) ggplot(data = mtcars, aes(x = disp, y = mpg)) + geom_point() + facet_grid(. ~ am) 中提取单个构面并将其另存为对象?这是一些简单的代码:

am=0

现在我想制作两个对象 - 一个用于am=1,另一个用于extension URLSession { func synchronousDataTaskWithURL(_ url: URL) -> (Data?, URLResponse?, Error?) { var data: Data? var response: URLResponse? var error: Error? let sem = DispatchSemaphore(value: 0) let task = self.dataTask(with: url as URL, completionHandler: { data = $0 response = $1 error = $2 as Error? sem.signal() }) task.resume() let result = sem.wait(timeout: DispatchTime.distantFuture) switch result { case .success: return (data, response, error) case .timedOut: let error = URLSessionError(kind: URLSessionError.ErrorKind.timeout) return (data, response, error) } } }

2 个答案:

答案 0 :(得分:4)

我不确定您为什么不使用子集,但您可以从构面网格中提取单个构面。

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)

答案 1 :(得分:1)

您可以在途中对数据进行子集化并删除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,则可以从绘图窗口手动导出。请参阅其上方的“导出”按钮。