添加网格单元对象

时间:2011-06-23 16:08:32

标签: r r-grid

所以设置如下:

dat <- data.frame(a = c("longnameonthelefthandside"), b = c(sample(10))) 
p <- ggplot(dat, aes(b,a)) + geom_point() + xlab("label")

我可以通过将unit对象传递给hjust来调整x轴标签:

p + opts(axis.title.x=theme_text(size=12,hjust=unit(0.3,"npc")))

但是有一些关于添加单位对象的东西(可能,根据?单位)我不会抓住:

u1 <- unit(0.5,"npc")
u2 <- unit(0.25,"npc")
p + opts(axis.title.x=theme_text(size=12,hjust=u1+u2))

产生以下错误:

Error in grid.Call("L_textBounds", as.graphicsAnnot(x$label), x$x, x$y,  : 
Polygon edge not found
In addition: Warning message:
In validDetails.text(x) : NAs introduced by coercion

作为进一步的背景,我试图通过Baptiste here

拼凑一些有些神秘的解决方法

2 个答案:

答案 0 :(得分:2)

Baptiste的代码包括对convertUnit的调用。一旦你把它放回代码中,就会产生一个情节:

p + opts(
  axis.title.x=theme_text(size=12,hjust=convertUnit(u1+u2, "npc", value=TRUE))
)

答案 1 :(得分:2)

在绘制的过程中,hjust的单位可能会隐式转换为数字。 所以,试试这个:

grid.lines(c(0.5, 0.5))
grid.text("orzorzorz", y=0.4, hjust=unit(0.25, "npc"))
grid.text("orzorzorz", y=0.5, hjust=unit(0.25, "mm"))
grid.text("orzorzorz", y=0.6, hjust=unit(0.25, "cm"))
grid.text("orzorzorz", y=0.7, hjust=0.25)

以及u1+u2导致错误的原因是:

> c(u1+u2)
$fname
[1] "+"

$arg1
[1] 0.5npc

$arg2
[1] 0.25npc

绝对不能将其转换为数字。

所以,convertUnit是一种解决方法,但简单地说,hjust = c(u1)+c(u2)就足够了。