面板文字xy图R

3
我正在为lattice中的不同面板添加文本,并想知道是否有一种方法可以不指定x和y坐标,或者是否有类似于图例的东西,可以说出左上角或右上角等位置?
我之所以这样问,是因为我想在绘图代码中使用scales=free,但当我这样做时,mytext代码中的文本会遮盖部分图形,而且不利于制作良好的图形。我希望有一种方法可以绘制图形,而不必制作单独的图形,因为在我的实际数据集中,我有多达10个分组因子级别(代码中的sams)。提供的示例不像真实数据那样极端。
示例数据
d_exp<-data.frame(sams=c(rep("A",6),rep("B",6),rep("C",6)),
    gear=c(rep(1:2,9)),
    fraction=c(.12,.61,.23,.05,.13,.45,0.3,.5,.45,.20,.35,.10,.8,.60,.10,.01,.23,.03),
    interval=c(rep(c(0,10,20),6)))

d_exp<-d_exp[order(d_exp$sams,d_exp$gear,d_exp$interval),]

使用相同的刻度绘制图表。我的文本x和y坐标已经指定。

    mytext<-c("N=3","N=35","N=6")

   panel.my <- function(...) {
    panel.superpose(col=c("red","blue"),lwd=1.5,...)
    panel.text(x=2.5,y=0.5,labels=mytext[panel.number()],cex=.8) 
}

xyplot(fraction~interval | sams, data=d_exp,groups=gear,type="l",
    scales=list(relation="same",y=list(alternating=1,cex=0.8),x=list(alternating=1,cex=.8,abbreviate=F)),
    strip = strip.custom(bg="white", strip.levels = T),drop.unused.levels=T,as.table=T,
    par.strip.text=list(cex=0.8),panel=panel.my)

尺度自由也是同样的情况。由于所有文本具有相同的坐标,因此文本在奇怪的位置。
xyplot(fraction~interval | sams, data=d_exp,groups=gear,type="l",
    scales=list(relation="free",y=list(alternating=1,cex=0.8),x=list(alternating=1,cex=.8,abbreviate=F)),
    strip = strip.custom(bg="white", strip.levels = T),drop.unused.levels=T,as.table=T,
    par.strip.text=list(cex=0.8),panel=panel.my)

感谢您的帮助。
1个回答

4
您可以使用 grid.text() 来以独立于范围的方式指定单位。例如:
library(grid)
panel.my <- function(...) {
    panel.superpose(col=c("red","blue"),lwd=1.5,...)
    grid.text(x=.5,y=.8,label=mytext[panel.number()]) 
}

使用grid.text时,默认情况下xy的值使用npc单位,范围从0到1。因此,x = .5表示居中,y = .8表示距离顶部80%。


我尝试安装grid包,但是在R版本3.2.1中没有可用的grid。不过听起来它应该可以工作。谢谢。 - user41509
1
@user41509 grid 是 Lattice 绘图包运行所需的默认包。您无需单独安装它。只需运行 library(grid) 即可加载。 - MrFlick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接