2015-06-12 6 views
1

Может ли кто-нибудь решить, почему для меня происходит обрезание имен строк? Оно не зависит от длины обертки строки. Указание row.just =" center " не истреблю имена строк.Строковые имена в таблицеGrob отключены при использовании 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