2015-06-12 22 views
1

時,tableGrob中的行名被切斷了任何人都可以解決爲什麼我的行名被截斷的原因?它獨立於字符串換行的長度指定row.just =」center「不切斷該行的名稱。當使用row.just =「left

x <- data.frame(row.names=paste("Very very name goes in here somewhere yep it is a looooonnngggg name! phew that was a long name",1:10)) 

# string wrap long names  
rownames(x) <- sapply(lapply(rownames(x), strwrap, width=40), paste, collapse="\n") 

# data frame  
x[,1] <- 1:10 
x[,2] <- sample(1:100,10) 
x[,3] <- sample(LETTERS[1:26],10) 
colnames(x) <- c("Value 1", "Value 2", "Label") 

# create table 
main_table <- tableGrob(x,cols = colnames(x), show.colnames = TRUE, row.just = "left") 

# display table (is there another way to display? 
grid.arrange(main_table) 

給我這個(抱歉變焦)

Left aligned table

而指定 「中心」,使我這個

main_table <- tableGrob(x,cols = colnames(x), show.colnames = TRUE, row.just = "center") 
grid.arrange(main_table) 

Center aligned table

任何想法?

p.s.我不知道爲什麼圖像是這樣的,當我在繪圖窗口中單擊「縮放」時,他們是全表,但保存/導出僅保存放大版本...

回答

2

我猜測它是因爲可用的寬度是從字符串寬度計算的,但是對齊會將文本向右移動。 hjust/x互動總是讓我在網格中困惑。你可以「修復」它,

textii <- function(d, gp=gpar(), name="row-label-", 
        just="center", parse=TRUE){ 
    x <- switch(just, "center"=0.5, "right"=1, "left"=0) 
    parseglobal <- parse 
    ## allow the correct space to fit well in a rectangle 
    function(ii, parse=parseglobal){ 
    lab <- if(parse) parse(text=d[ii]) else d[ii] 
    textGrob(x=x, label=lab, just=just, gp=gp, name=paste(name, ii, sep="")) 
    } 
} 


assignInNamespace("textii", textii, "gridExtra") 

但這不是一個很好的解決方案,我害怕。

+0

大家好,我在週末短暫觀看後就回來了。你能解釋我的初始代碼中如何/在哪裏實現你的解決方案嗎?對不起,我很新,對我來說並不明顯。 – Alex

+0

問題出在gridExtra軟件包的內部,因此要修復它,您可以編輯軟件包源並重新安裝它,或者,作爲一次性解決方法,只需將上面的代碼複製並粘貼到R控制檯中即可。它會在會話期間用這個新的函數代替'textii'函數的內部定義。 – baptiste