如何在有新线和替换的情况下在格子中使用粘贴功能

时间:2013-05-15 17:14:55

标签: r paste lattice

民间,

我有以下示例,其中我使用lattice作为(随机)数据的散点图。我要做的是粘贴三个变量,分别在一个新行中。第三个变量需要有一个下标。

下面的代码会产生与上述相同的问题:

library(lattice)
library(grid)

set.seed(20)
a <- data.frame(par1=runif(10, min=1, max=100),par2=runif(10, min=1, max=100))

print(xyplot( par1 ~ par2,
              data=a,
              panel = function(x,y){
                n <- length(x)
                r <- round(cor(x, y, use="pairwise.complete.obs"), 2)
                rc <- 1
                panel.abline(a=0, b=1, lty=2, col="grey59", lwd=1.5)
                panel.xyplot(x,y, type = c("p", "g"), col="grey29", cex=0.75)
                panel.abline(lm(y ~ x), col = "red", lwd=1.5)
                grid.text(paste("n=",length(x), "\n", "r=", r, "\n", expression(paste(r[c])), "=", rc, sep=""), 0.60, .90, gp=gpar(col="black", fontsize=11), just="left")
              }
))

2 个答案:

答案 0 :(得分:1)

另一种选择,如果你想让R为你计算线高,就是使用一个不可见的grid.table,

library(gridExtra)
multiline_text <- function(label){
 grid.table(as.matrix(strsplit(label, "\\n")[[1]]), parse=TRUE,
                  theme=theme.list(gpar.corefill = gpar(fill = NA, col = NA),
                                   core.just = "center"))
}
txt <- "First~line \n italic('see that slant') \n integral(f, a, b)"
grid.newpage() ; multiline_text(txt)  

enter image description here

答案 1 :(得分:0)

根据@baptiste的建议,可以更改代码以避免混合换行符和表达式,如下所示:

library(lattice)
library(grid)

set.seed(20)
a <- data.frame(par1=runif(10, min=1, max=100),par2=runif(10, min=1, max=100))

print(xyplot( par1 ~ par2,
              data=a,
              panel = function(x,y){
                n <- length(x)
                r <- round(cor(x, y, use="pairwise.complete.obs"), 2)
                rc <- 1
                panel.abline(a=0, b=1, lty=2, col="grey59", lwd=1.5)
                panel.xyplot(x,y, type = c("p", "g"), col="grey29", cex=0.75)
                panel.abline(lm(y ~ x), col = "red", lwd=1.5)
                grid.text(paste("n=",length(x), "\n", "r=", r, "\n", sep=""), 0.60, .90, gp=gpar(col="black", fontsize=11), just="left")
                grid.text(bquote(r[c] == .(rc)), 0.60, .86, gp=gpar(col="black", fontsize=11), just="left")
              }
))

如果您有其他选择,很乐意看到它们。