如何在绘图期间打开新的绘图窗口

时间:2013-11-22 02:15:26

标签: r plot

我正在研究一些代码,这些代码创建一个由多个单独的图组成的图,每个ID一个,显示纵向数据。出于视觉目的,我使用par将图形数量限制为每个绘图20个,但数据集中有超过20个ID,因此我需要多个绘图。

当前问题:一旦代码超出20(或N * 20)ID,如何避免使用新绘图覆盖早期绘图。我想我需要使用plot.new(),但不清楚如何使用它,并且找不到以前完全解决这个问题的帖子。

我的代码:

# Create sample data by sampling
Start <- as.Date("2012-01-01")
End <- as.Date("2013-01-01")
data1 <- data.frame(ID = sort(rep(seq(64),3)), VisitDate = sort((Start + sample.int(End-Start, 192))), Count = rnorm(192, mean = 300, sd = 12), Treat =  sample(0:1, 192, replace = TRUE))

# calculate days elapsed since start date, by ID
data1$VisitDate <- with(data1,as.Date(VisitDate,format="%y-%b-%d"))
data1$Days <- unlist(with(data1,tapply(VisitDate,ID,function(x){x-x[1]})))

#Define plot function
plot_one <- function(d){
 with(d, plot(Days, Count, t="n", tck=1, main=unique(d$ID), cex.main = 0.8, ylab = "", yaxt = 'n', xlab = "", xaxt="n",  xlim=c(0,8), ylim=c(0,500))) # set limits
    grid(lwd = 0.3, lty = 7)
    with(d[d$Treat == 0,], points(Days, Count, col = 1)) 
    with(d[d$Treat == 1,], points(Days, Count, col = 2))
}

#Create multiple plot figure
par(mfrow=c(4,5), oma = c(0.5,0.5,0.5,0.5), mar = c(0.5,0.5,0.5,0.5))
plyr::d_ply(data1, "ID", plot_one) 

1 个答案:

答案 0 :(得分:1)

如果您使用的是Windows,请致电windows()。如果您使用的是Mac,请致电quartz()。这些会打开一个新设备,以便您下次拨打(例如)plot()时不会覆盖您现有的地块。