【发布时间】:2009-11-26 01:20:46
【问题描述】:
每当我运行这段代码时,第一个情节都会简单地覆盖前一个情节。 R中没有办法分开以获得两个地块吗?
plot(pc)
title(main='abc',xlab='xx',ylab='yy')
plot(pcs)
title(main='sdf',xlab='sdf',ylab='xcv')
【问题讨论】:
每当我运行这段代码时,第一个情节都会简单地覆盖前一个情节。 R中没有办法分开以获得两个地块吗?
plot(pc)
title(main='abc',xlab='xx',ylab='yy')
plot(pcs)
title(main='sdf',xlab='sdf',ylab='xcv')
【问题讨论】:
如果您只想同时打开两个不同的绘图窗口,请使用dev.new,例如
plot(1:10)
dev.new()
plot(10:1)
如果您想在同一个窗口中绘制两个图,那么正如 Shane 所说,设置 mfrow 参数。
par(mfrow = c(2,1))
plot(1:10)
plot(10:1)
如果你想尝试一些更高级的东西,那么你可以看看 lattice graphics 或 ggplot,它们都非常适合创建条件图(不同数据子集出现在不同帧中的图)。
格子示例:
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!
在绘图之前尝试使用par。
par(mfrow = c(2, 1))
【讨论】:
你也可以试试布局命令:
试试
layout(1:2)
plot(A)
plot(B)
【讨论】:
在每个情节之前尝试命令x11(),这是一个示例:
x11()
plot(1:10)
x11()
plot(rnorm(10))
这将导致不同的绘图窗口。您可以将“par”命令添加到这些x11() 窗口中的任何一个,并获得更多种类的图,即一个窗口中有 4 个图,而另一个窗口中有一个大图。
【讨论】:
如果您想在单独的窗口或文件中显示 2 个绘图,您可以在调用每个绘图命令之前选择新设备。见:
?设备
还有,
?dev.cur
【讨论】:
另一种答案是将绘图分配为对象,然后您可以在需要时显示它 即
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
【讨论】:
plot 返回NULL。您不能以这种方式保存图形的详细信息。如果您使用基于grid 的图形(例如lattice),您的建议是可能的,例如p1 <- xyplot(y~x); print(p1).