2013-05-15 466 views
0

民間,如何而具有新線使用粘貼功能的晶格和替代

我有以下示例,其中我使用晶格爲(隨機)數據的散點圖。我想要做的是粘貼三個變量,分別換行。問題發現與第三個變量需要有一個下標。

下面發現會產生所描述的相同問題的代碼:

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") 
       } 
)) 
+0

我不使用點陣多,但'貼(...,表達式(paste(r [c])),...)似乎是一個非常奇怪的操作。 – Frank

+0

確實很奇怪。我只寫下它來表明表達式(paste(r [c]))實際上是在自己的工作,但是當與paste()結合使用時,它不會。感謝回覆。 –

+0

正如'?plotmath'中所解釋的那樣,不能混用換行符和表達式。這裏最好的選擇是有兩個單獨的調用'grid.text',一個用於文本,一個用於plotmath表達式slighlty在y中移動。 – baptiste

回答

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

+0

謝謝你的時間。 –

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") 
       } 
)) 

如若你有其他的選擇,會很高興看到他們。

相關問題