我想使用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)
}
}
}
。
答案 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,则可以从绘图窗口手动导出。请参阅其上方的“导出”按钮。