如何在 R 中的一张图中绘制两个图形?我可以使用 mfrow=c(2,1) 将它们中的两个画在单独的部分中,但它们没有画在一起,所以对我来说没有多大意义.. 谢谢
1 回答
请参阅我与 Devon Shurick 编写的本教程(它不会去任何地方,对于那些会因为作为链接而投反对票的人): http: //www.stat.berkeley.edu/~vigre/undergrad/reports/VIGRERintro.pdf
如果您想将一个图表叠加在另一个图表上,您可以执行以下操作:
要从两个向量 x 和 y 绘制数据点,我们可以使用 plot(x, y) 形式的 plot 函数,或者类似地使用 plot(x) 形式通过索引绘制一个向量。
plot(NORM, TEE, ylim = c(-4, 5), main = "NORM and TEE plot")
可以根据 xlim = c(lowerBound, upperBound) 和 ylim = c(lowerBound, upperBound) 来指定要绘制的限制或范围,如上面对 plot 的调用中所示。main = 指定绘图的标题。标签也可以用 xlab 和 ylab 选项指定。我们可以使用 points 函数将点叠加在原始图的顶部。例如,为了区分所有点 (TEEi, NORMi ) 使得 TEEi < NORM2i -1 为蓝色点,我们可以将点称为如下:
points(NORM[NORM^2 -1> TEE], TEE[ TEE + 1< NORM^2], col = "blue")
legend(legend = c("TEE > NORM^2 - 1 ", "TEE < NORM^2 - 1" ), col = c(1, 4), x = "topright", pch = 1)
如果您想要多个图表并排显示,以下将有所帮助:
第 3.4 节完全致力于在一张图中绘制多个图表。
以下是该部分的一些示例:
3.4.1 标准杆
通过使用 par 函数和 mfrow 选项,可以将多个图形放在一个图形上。mfrow 与以下格式一起使用 mfrow = c(# rows, # columns)。例如,
par(mfrow = c(1, 2))
plot(NORM, TEE, ylim = c(-4, 5), main = "NORM and TEE plot")
plot(NORM, TEE, ylim = c(-4, 5), main = "NORM and TEE plot")
points(NORM[NORM^2 -1> TEE], TEE[ TEE + 1< NORM^2], col = "blue")
3.4.3 更换屏幕
假设我们想要这个绘图部分的所有绘图都在一个图形上。6 我们可以使用 split.screen 执行此操作,如下所示
screen.split(2,2)
#[1] 1 2 3 4
screen(1) # what follows goes in slot (1,1)
hist(RandomNormal, seq(-3.2, 3.2, .2), prob = TRUE)
curve(dnorm(x), add = TRUE, col = "red");
screen(2) # what follows goes in slot (1,2);
boxplot(DATA.oner);
screen(3) # similarly for (2,1);
plot(NORM, TEE, ylim = c(-4, 5), main = "NORM and TEE plot");
screen(4) # similarly for (2,2);
plot(NORM, TEE, ylim = c(-4, 5), main = "NORM and TEE plot");
points(NORM[NORM^2 - 1 > TEE], TEE[TEE + 1 < NORM^2], col = "blue");
现在,假设您想要左上角的箱形图和右上角的直方图,此外您还想为箱形图指定一个标题。只需相应地重新分配每个屏幕的内容
screen(1) # Watch the screen (1,1) go blank
boxplot(DATA.oner, main = "Box Plots of DATA.oner")
screen(2) # again for slot (1,2)
hist(RandomNormal, seq(-3.2, 3.2, .2), prob = TRUE)
curve(dnorm(x), add = TRUE, col = "red")
3.4.4 分屏中的分屏
您可能已经注意到,直方图的图例被排除在绘图之外。那是因为很难在这么小的屏幕上放置图例。
假设,为了解决这个问题,我们想要一个包含大直方图和较小的箱线图和散点图的图形。我们可以通过拆分已经拆分的屏幕来实现这个目标。观察下面的例子
split.screen(c(2,1)) # The screen is now split in two
# [1] 1 2
split.screen(c(1,2), screen = 2) # splits the second into 2
# [1] 3 4
screen(1) # note screen 2 is now refered to as 3 and 4
hist(RandomNormal, seq(-3.2, 3.2, .2), prob = TRUE)
curve(dnorm(x), add = TRUE, col = "red")
legend(legend = c("Theoretical N(0, 1)"), col = c(2, 3), x = "topright", lty = 1)
screen(3) # We call on screen 3 and 4, not 2
boxplot(DATA.oner, main = "Box Plot of DATA.oner")
screen(4)
plot(NORM, TEE, ylim = c(-4, 5), main = "NORM and TEE plot")