如何在格子图中添加文本?

4
可以有人告诉我如何在Lattice绘图中添加文本行吗?
我的代码是:
xyplot(Neff~Eeff,data=phuong,panel=mypanel,
       col="black",
       pch=18,xlab="Energy efficiency (%)",
       ylab = "Nitrogen efficiency (%)", main="(a)")

这里的pane=mypanel是添加一条abline。我想要在EeffNeff之间添加一个线性回归方程到他们的图表中。

谢谢!


2
请看 ?panel.text,这是一个你可以添加到 mypanel 函数中的函数。 - BenBarnes
它对我不起作用。这是我的面板代码: mypanel<-function(x,y,...){
  • panel.xyplot(...)
  • panel.abline(lm(Neff~Eeff,data=phuong))
  • panel.text(30,30,labels=tp)
  • } 你能帮我看一下吗?
- hn.phuong
请提供一个可重现的示例,以便更容易地帮助您。示例制作方法 - BenBarnes
非常感谢您的评论Benbarnes。我的问题实际上是这样的。 正如您在上面的代码中所看到的,我有两列数据:Eeff和Neff
  1. 我使用xyplot函数制作了散点图
  2. 我使用简单线性回归函数:lm(Eeff〜Neff,data = phuong)来找到回归方程式:即Eff = 19.7 + 0.36 Neff 现在,我想将“Eff = 19.7 + 0.36 Neff”添加到散点图左上角。 请问您能帮我吗? 非常感谢!
- hn.phuong
@hn.phuong 这仍然无法重现。Ben提供了一个链接。请查看他的链接。基本思路是,在您的原始帖子中,我们应该能够精确地获取您使用的代码并重现您的错误。您希望数据集尽可能小(可能为5-10行),同时仍能够重现结果。您还可以使用R的许多内置数据集作为示例。 - Tyler Rinker
显示剩余2条评论
2个回答

9
所以,使用可重现数据:
set.seed(1)

phuong <- data.frame(Eeff = rnorm(100,31))
phuong$Neff <- rnorm(100,19.7 + .36*phuong$Eeff)

# Create the lm object ahead of time
lm1 <- lm(Neff ~ Eeff, data = phuong)

# Create the character string that you want to print
tp <- sprintf("%s=%.1f + %.2f %s", all.vars(formula(lm1))[1],
  coef(lm1)[1], coef(lm1)[2], all.vars(formula(lm1))[2])

# Change the mypanel function to use the lm1 object
mypanel<-function(x,y,...){
  panel.xyplot(x, y, ...)
  panel.abline(lm1)
  panel.text(30,33,labels=tp)
}

library(lattice)

# and off we go.

xyplot(Neff~Eeff,data=phuong,panel=mypanel,
       col="black",
       pch=18,xlab="Energy efficiency (%)",
       ylab = "Nitrogen efficiency (%)", main="(a)")

enter image description here


嗨BenBarnes,非常感谢您的帮助。我有另一个与此相关的小问题。这种情况是要添加这两个变量的线性方程。如果我想添加随机单词,例如“谢谢!”,我该怎么做? - hn.phuong
嗨@hn.phuong,如果您已经创建了tp对象,要添加其他文本,请修改它,例如使用paste(tp,"Thanks!")。或者,如果您只想添加“Thanks!”而不包括回归方程式,则可以使用tp <- "Thanks!"。然后使用xyplot再次创建散点图。 - BenBarnes
@hn.phuong,如果这个答案解决了你的问题,请考虑将其标记为被接受的答案(在答案开头附近有一个勾选标记)。 - BenBarnes

5
library(latticeExtra)

set.seed(1)

phuong <- data.frame(Eeff = rnorm(100,31))
phuong$Neff <- rnorm(100,19.7 + .36*phuong$Eeff)

xyplot(Neff ~ Eeff, data= phuong) + 
  layer(panel.ablineq(lm(Neff ~ Eeff, data= phuong), r.sq= TRUE, rot = TRUE))

enter image description here


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