2017-04-02 64 views
1

使用默认表格输出时,默认情况下使用参数名称(本例中为k1和k2)绘制“轴”标签。这对于比较群集成员资格特别有用,而表示最重要的是哪些群集是行,哪些是列。将轴标签添加到表格中的R代码中

table(
    k1=matrix(1:4, 2), 
    k2=matrix(1:4, 2) 
) 

    k2 
k1 1 2 3 4 
    1 1 0 0 0 
    2 0 1 0 0 
    3 0 0 1 0 
    4 0 0 0 1 

我试图利用tableGrob输出一些表,在grid.arrange与其他ggplot部件组成。但是,轴标签丢失。

grid.arrange(tableGrob(
    table(
    k1=matrix(1:4, 2), 
    k2=matrix(1:4, 2) 
) 
)) 

missingAxis

所有我想要做的是有那些包括甚至包括手动它们使GROB后。

感谢

编辑:尝试用annotation_custom

annotation_custom

代码:

ggTableAxis2 <- function(t) { 
    my_grob <- tableGrob(t) 

    my_plot <- ggplot(mapping = aes(k2, k1)) + 
    annotation_custom(my_grob) + 
    scale_x_continuous(position = 'top') + 
    theme(axis.title = element_text(angle = 0, hjust = 0), 
      axis.title.x.top = element_text(hjust = 0)) 
    return(my_plot) 
} 

grid.arrange(
    ggTableAxis2(
    table(
     k1=matrix(1:4, 2), 
     k2=matrix(1:4, 2) 
    ) 
), 
    ggTableAxis2(
    table(
     k1=matrix(1:4, 2), 
     k2=matrix(1:4, 2) 
    ) 
), 
    nrow=1 
) 

回答

3

不知道正是您想要的标签,但它可能是最容易grobs添加到gtable,

tbl <- table(
    longlabel1=matrix(1:4, 2), 
    longlabel2=matrix(1:4, 2) 
) 

nms <- names(dimnames(tbl)) 


library(gridExtra) 
library(grid) 
library(gtable) 
grid.newpage() 

tg <- textGrob(nms[1], x=0, hjust=0) 
lg <- textGrob(nms[2], x=1, hjust=1) 
g <- tableGrob(tbl) 
g <- gtable_add_rows(g, unit(1,"line"), 0) 
g <- gtable_add_cols(g, grobWidth(lg), 0) 
g <- gtable_add_grob(g, tg, t = 1, l=3, r=ncol(g)) 
g <- gtable_add_grob(g, lg, l = 1, t=2) 
grid.draw(g) 

enter image description here

+0

这很好,但是如果文本超过3个字符,文本会被截断。有任何想法吗? – dpwrussell

2

你可以使用一个空ggplot与映射美学:

library(grid) 
library(gridExtra) 
library(ggplot2) 

my_grob <- tableGrob(table(k1 = matrix(1:4, 2), k2 = matrix(1:4, 2))) 

my_plot <- ggplot(mapping = aes(k2, k1)) + 
    annotation_custom(my_grob) + 
    scale_x_continuous(position = 'top') + 
    theme(axis.title.y = element_text(angle = 0), 
     axis.title.x.top = element_text(hjust = 0)) 

grid.arrange(my_plot, my_plot, my_plot, my_plot) 

enter image description here

+0

这是伟大的,但由于某种原因,我得到我在问题中加入了完全不同的结果。轮换是不同的,利润率是巨大的! – dpwrussell

+0

对不起,请参阅编辑。只是让你的情节变小。 – Axeman

+0

太好了,谢谢。愚蠢的问题,但我怎样才能让情节更小?在我的RMarkdown文件中,我可以更改'fig.height',但这只是缩小表格的大小以占用相同的相对空间量。如果我在控制台中运行代码(即避免RMarkdown),我仍然可以获得大量的利润。道歉,我是R新手! – dpwrussell