1

我有以下问题:我想在 R 中绘制一个图,其中两个数字相互上方。然而,上图应该占据大部分空间,而下图应该有一个非常低的高度(它只是用来指示“主要”图中的特殊位置)。目前我有这段代码,但我不知道如何设置每行应该占用的空间(第二个图应该在第一个图的正下方):

dev.new()
png("multitest.png")
par( mfrow = c( 2, 1 ) ) 
plot( rnorm( n = 10 ), col = "blue", main = "plot 1", cex.lab = 1.1,ylab="yname", xlab='')
plot( rnorm( n = 10 ), col = "red", main = "", cex.lab = 1.1, xaxt='n',yaxt='n',xlab="xname", ylab="")
dev.off()

我必须在我不知道是否有其他软件包可用于 R 的服务器上运行它。如果有使用其他软件包的建议,我会尝试它。在此先感谢您,到目前为止,我仅在 R 中使用图来绘制简单的直方图。

4

2 回答 2

5

正如@Roland 所指出的,layout()为此目的会比使用par(mfrow...). 以下是一些基本示例,向您展示如何开始使用layout. 这些示例都不适合您:我只是给出示例,以便您了解如何进行实验。这里还有一个有用的功能layout.show()

  1. 两个地块,一个在另一个之上。第一个地块比另一个地块宽。

    首先,考虑一下您希望数字如何出现的矩阵。按顺序编号。1= 图 1,2= 图 2,0= 此空间中未绘制任何内容。

         [,1] [,2] [,3] [,4]
    [1,]    1    1    1    1
    [2,]    0    2    2    0
    

    在 中使用此矩阵layout()

    layout(matrix(c(1, 1, 1, 1, 0, 2, 2, 0), 2, 4, byrow=TRUE))
    plot(rnorm(n = 10), col = "blue", main = "plot 1", 
         cex.lab = 1.1, ylab="yname", xlab='')
    plot(rnorm(n = 10), col = "red", main = "", cex.lab = 1.1, 
         xaxt='n', yaxt='n', xlab="xname", ylab="")
    

    在此处输入图像描述

  2. 请注意,每个地块的高度仍然相同。您可以使用heights参数来控制这一点:

    layout(matrix(c(1, 1, 1, 1, 0, 2, 2, 0), 2, 4, byrow=TRUE), 
           heights = c(7, 3))
    plot(rnorm(n = 10), col = "blue", main = "plot 1", 
         cex.lab = 1.1, ylab="yname", xlab='')
    plot(rnorm(n = 10), col = "red", main = "", cex.lab = 1.1, 
         xaxt='n', yaxt='n', xlab="xname", ylab="")
    

    在此处输入图像描述

  3. 这是一个包含三个图的示例。

    layout(matrix(c(1, 1, 2, 3), 2, 2, byrow=TRUE))
    plot(rnorm(n = 10), col = "blue", main = "plot 1", 
         cex.lab = 1.1, ylab="yname", xlab='')
    plot(rnorm(n = 10), col = "red", main = "", cex.lab = 1.1, 
         xaxt='n', yaxt='n', xlab="xname", ylab="")
    plot(rnorm(n = 10), col = "green", main = "", cex.lab = 1.1, 
         xaxt='n', yaxt='n', xlab="zname", ylab="")
    

    在此处输入图像描述

于 2012-10-12T09:17:03.127 回答
3

使用布局:

nf <- layout( c( 1, 2 ), heights= c( 10, 2 ) )
plot( ... )
plot( .... )

第一个参数是一个模拟屏幕划分方式的矩阵(这里我们有一个向量作为参数,但你可以使用matrix( c( 1, 2 ), nrow=2, ncol=1 ).

于 2012-10-12T09:15:00.213 回答