将轴标签添加到R中的tableGrob

时间:2017-04-02 09:25:41

标签: r ggplot2

使用默认表格输出时,默认为绘制"轴"使用参数名称的标签(在这种情况下为k1和k2)。这对于比较集群成员资格尤其有用,最重要的是表示哪个集群是行,哪些是列。

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
)

2 个答案:

答案 0 :(得分:4)

不确定您想要标签的确切位置,但最好将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

答案 1 :(得分: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