在通用R图中将标题放在标题周围

时间:2016-02-20 18:24:48

标签: r plot

我有一个带标题的框架图。我想知道是否有一种快速简便的方法来围绕(主要)标题的标题。

框架的宽度应与图表周围的框架宽度相同。还有办法调整框架的高度吗?

我想坚持通用的情节功能。

# Some example data
x <- rnorm(10)
y <- rnorm(10)

# Plot data and add title
plot(x,y, 
     xlab = "",
     ylab = "",
     frame = TRUE
     )
title( main = "This should be framed")

非常感谢大家周末愉快!

2 个答案:

答案 0 :(得分:12)

一种可能性是使用rect

首先使用par("usr")来获取“绘图区域用户坐标的极值”。

因为你想要“框架应该与图周围的框架具有相同的宽度”,所以x位置很简单:使用'用户坐标'的第一个和第二个值作为xleftxright

rect的底部和顶部位置需要更多工作。 title的y位置默认为垂直居中(外)边距3 ”(?title)。使用par("mai")以英寸为单位获取边距。通过将边距3除以2(par("mai")[3] / 2)来计算前y边距的中点。将帧的高度定义为例如0.5,分别对应于标题中心与图形区域和绘图区域边界之间的中间位置。

要从英寸转换为用户坐标,请使用grconvertY。也就是说,我们将英寸值乘以diff(grconvertY(y = 0:1, from = "inches", to = "user"))(参见例如here)。然后将该值添加到y的上部用户坐标(coord[4])。

coord <- par("usr")
y_mid <- par("mai")[3] / 2
height <- 0.5
conv <- diff(grconvertY(y = 0:1, from = "inches", to = "user"))

rect(xleft = coord[1],
     xright = coord[2],
     ybottom = coord[4] + (y_mid * (1 - height) * conv),
     ytop = coord[4] + (y_mid * (1 + height) * conv),
     xpd = TRUE)

enter image description here

答案 1 :(得分:3)

网格图形系统有更好的处理单位设施,因此我很想使用 gridBase 包来进入&#34;进入&#34 34;一个图形系统,其中矩形的形状和位置可以更直接地命名。这可能是这样的:

library(grid)
library(gridBase)

## Standard idiom for setting your frame of reference to be that of the base R plot's frame
lapply(baseViewports(), pushViewport)
## Draw a rectangle centered 2 lines above frame and 1.5 lines of text in height
grid.rect(y = unit(1,"npc") + unit(2, "lines"), 
          height = unit(1.5, "lines"), just = "center")

enter image description here

与Henrik的基本R解决方案不同,这不会要求您为每个情节手动操作,试验直到您获得矩形的y坐标恰到好处。