如何在Lattice中为每个面板添加不同的文本

7
我想在lattice中的xyplot中为每个面板添加不同的文本。
res<- xyplot(CumSpec ~ CumTotal | Site, data=data1, index.cond=list(c(1,2,3)),layout = c(3,1,1), aspect = 1,
         axis=axis.overlap, origin=0, xlab="Total number of individuals", ylab="Total number of species",
         between = list(x = 0), 
         scales=list(tick.number = 8, cex = .9, x=list(alternating=1), x=list(rot=90)),
         par.settings = my.settings,
         par.strip.text=list(col="white", font=2),
panel = function(x, y) {
panel.xyplot(x, y)

panel.abline(lm(y ~ x), lwd = 0.5, lty=2)
panel.text(400, 4.6, label="R=0.334", font=1)
}) 
res

我尝试使用panel.text,但它会将标签添加到每个面板中。请问有谁知道如何实现这一点?感谢您的帮助。


1
最好提供可重现的数据或使用内置数据集,以便我们可以轻松地重新创建您的图形并向您展示如何获得所需的结果。否则,这只是一些我们无法真正处理的任意代码。 - Thomas
1个回答

7

你需要的基本策略是首先创建一个字符向量,其中向量中的每个元素都是你想在特定面板上显示的文本。然后,你可以使用panel.number()函数为每个面板选择不同的字符向量元素。以下是一个简单的例子:

library(lattice)
X<-rnorm(100)
Y<-rnorm(100)
Z<-c(rep("A",50),rep("B",50))
df1<-data.frame(X,Y,Z)

MyText<-c("Panel 1 Text", "Panel 2 Text")

xyplot(X~Y|Z, data=df1,
   panel=function(x, y,...){
   panel.xyplot(x,y,...)
   panel.text(0,0,labels=MyText[panel.number()]) }
 )

您可以使用此策略来更改任何您想要在面板之间更改的内容(例如标签的x和y位置、颜色、pch值等)。


你好。如果有人想为每个面板设置不同的坐标,你会如何提供解决方案? - moth
1
如果您想要为文本设置不同的x和y坐标,您可以创建两个向量,例如MyXMyY,分别存储每个面板的x和y坐标。然后使用panel.text(x=MyX[panel.number()], y=MyY[panel.number()], labels=MyText[panel.number()])来指定每个面板的坐标和标签。 - John Paul
谢谢,我已经成功完成了。但是现在我在尝试将Mytext的两个元素放入一个面板时遇到了问题,我只能使用一个元素放置在一个面板中。你知道我该如何实现吗? - moth
@AlexandreMondaini 你可能应该开一个新的问题来讨论这个。 - John Paul

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