如何在R中分离两个图形?

24
无论何时运行此代码,第一个图表都会简单地覆盖上一个。在R中难道没有一种方法可以分开获取两个图表吗?
plot(pc)
title(main='abc',xlab='xx',ylab='yy')

plot(pcs)
title(main='sdf',xlab='sdf',ylab='xcv')
6个回答

39

如果您只想同时打开两个不同的绘图窗口,请使用dev.new,例如:

plot(1:10)
dev.new()
plot(10:1)

如果你想在同一窗口中绘制两个图形,那么就像Shane提到的一样,设置mfrow参数。

par(mfrow = c(2,1))
plot(1:10)
plot(10:1)
如果你想尝试更高级的内容,可以看看lattice图形或ggplot,它们都非常适合创建条件化图(在不同的框架中出现不同数据子集的图)。一个lattice示例:
library(lattice)
dfr <- data.frame(
  x   = rep(1:10, 2), 
  y   = c(1:10, 10:1), 
  grp = rep(letters[1:2], each = 10)
)
xyplot(y ~ x | grp, data = dfr)

一个ggplot的示例(您需要首先从CRAN下载ggplot)。

library(ggplot2)
qplot(x, y, data = dfr, facets = grp ~ .)
#or equivalently
ggplot(dfr, aes(x, y)) + geom_point() + facet_grid(grp ~ .)

必须给mfcol参数一些爱。它以列的方式填充您的图形,这与R中的每个其他对象填充的方式相同(好吧,主要是矩阵)。我刚刚发现了它。我一直在想为什么图形是按行填充的...不认为我会再回到mfrow - MichaelChirico

15
尝试在绘图之前使用par
 par(mfrow = c(2, 1))

4
你可以尝试使用布局命令:
尝试 layout(1:2)
plot(A)    
plot(B)

2

在每个绘图之前尝试使用命令x11(),以下是一个例子:

x11()
plot(1:10)
x11()
plot(rnorm(10))

这将会导致不同的绘图窗口。你可以在任何这些x11()窗口中添加“par”命令,从而获得更多种类的绘图,比如4个小图和一个大图在另一个窗口中。


0

另一种方法是将绘图分配为一个对象,然后在需要时显示它,例如:

abcplot<-plot(pc) title(main='abc',xlab='xx',ylab='yy')

sdfplot<-plot(pcs) title(main='sdf',xlab='sdf',ylab='xcv')

abcplot # Displays the abc plot
sdfplot # Displays the sdf plot
abcplot # Displays the abc plot again

1
这个不起作用。plot返回NULL。你不能以这种方式保存图形的细节。如果你使用基于grid的图形(例如lattice),你所建议的是可能的,例如p1 <- xyplot(y~x); print(p1) - Richie Cotton

0
如果您想在单独的窗口或文件中显示这2个图形,您可以在每个绘图命令之前选择新设备。请参见:

?Devices

以及,

?dev.cur


哦,好的,谢谢大家提供的所有好建议,我又学到了新东西。 - phpdash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接