在R中嵌套输出设备?

在R中嵌套输出设备?,r,plot,tee,R,Plot,Tee,是否可以将一个图形同时绘制到多个输出设备中?我试过: getwd() pdf("level1.pdf") pdf("level2.pdf") png("level3.png") x=1:10 y=1:10 plot(x, y) dev.off() # close level3 dev.off() # close level2 a=10:20 b=-10:0 plot(a,b) dev.off() # close level1

是否可以将一个图形同时绘制到多个输出设备中?我试过:

getwd()

pdf("level1.pdf")
  pdf("level2.pdf")
    png("level3.png")

    x=1:10
    y=1:10
    plot(x, y)

    dev.off() # close level3
  dev.off() # close level2

  a=10:20
  b=-10:0
  plot(a,b)

dev.off() # close level1
XY绘图仅进入
level3.png
。(我应该进入所有3个文件)


奇怪的是,AB绘图进入了level2.pdf,而我希望它被写入level1.pdf,因为level2.pdf应该已经关闭了?

使用
ggplot2
可以将绘图对象分配给变量,并多次打印它们:

library(ggplot2)
p <- ggplot(data.frame(x=1:10, y=1:10), aes(x=x, y=y)) + geom_point()

pdf('a.pdf')
print(p)
dev.off()

png('b.png')
print(p)
dev.off()

不确定是否有“常规”绘图,我会尽可能使用
ggplot2

可以同时打开多个设备,*但只有 一台设备当前处于“活动”状态,所有图形输出都发送到该设备。所以不,你不能一次将一个图形绘制成几个输出设备(并行/同时)。这里我详细介绍了一些您可以使用的设备类的方便函数

您可以使用以下功能:

  • dev.List()
    :t获取打开设备的列表
  • dev.cur()
    获取当前活动设备
  • dev.set()
    更改活动设备
  • dev.next()
    dev.prev()
    :在设备列表中创建下一个/上一个设备
例如:

pdf("level1.pdf")
pdf("level2.pdf")
png("level3.png")
## list the devices
dev.list()
       pdf            pdf png:level3.png 
         2              3              4 


## current device 
dev.cur()
png:level3.png         ## that's why The XY plot goes only into this device
                 4 
### this will go in the current device
x=1:10
y=1:10
plot(x, y)
## change the active device
dev.set(dev.next())
pdf 
  2 
### close all devices
graphics.off()
## list the devices
dev.list()
NULL
pdf("level1.pdf")
pdf("level2.pdf")
png("level3.png")
dev.off() # close level3
dev.off() # close level2
dev.cur()
pdf           ## plot A,B goes on this device
  3 
因此,将此应用于您的示例:

pdf("level1.pdf")
pdf("level2.pdf")
png("level3.png")
## list the devices
dev.list()
       pdf            pdf png:level3.png 
         2              3              4 


## current device 
dev.cur()
png:level3.png         ## that's why The XY plot goes only into this device
                 4 
### this will go in the current device
x=1:10
y=1:10
plot(x, y)
## change the active device
dev.set(dev.next())
pdf 
  2 
### close all devices
graphics.off()
## list the devices
dev.list()
NULL
pdf("level1.pdf")
pdf("level2.pdf")
png("level3.png")
dev.off() # close level3
dev.off() # close level2
dev.cur()
pdf           ## plot A,B goes on this device
  3 

功能
ggsave
更方便。