在循环中连续使用时,在 tableGrob 对象上组合失败?
Combine on tableGrob objects fails when used serially in a loop?
每个人我都在尝试构建 table当新数据到达时动态地抓取对象,当它们可用时我生成结果。这是我尝试生成这样的 tables 但由于某种原因 combine()
函数没有按预期工作。
我的代码如下:
library(gridExtra)
library(grid)
library(ggplot2)
alphabets <- c(rep("A", 3), rep("B", 3), rep("C",3))
numbers <- c(rep(c(1,2,3), 3))
df1 <- data.frame(alphabets = alphabets[1:4],numbers=numbers[1:4])
df2 <- data.frame(alphabets = alphabets[1:4],numbers=numbers[1:4])
df3 <- data.frame(alphabets = alphabets,numbers=numbers)
tab1 <- tableGrob(df1,theme = ttheme_default(),row=NULL)
tab2 <- tableGrob(df2,theme = ttheme_default(),row=NULL)
tab3 <- tableGrob(df3,theme = ttheme_default(),row=NULL)
g1 <- combine(tab1,tab2,along = 2)# 1st combine operation
g2 <- combine(g1,tab3,along = 1)#second combine operation
grid.arrange(g2)
输出缺少来自 g1 tableGrob 对象的 table。
知道为什么会这样吗?
你可以像这样绑定两个数据框吗?
alphabets <- c(rep("A", 3), rep("B", 3), rep("C",3))
numbers <- c(rep(c(1,2,3), 3))
df1 <- data.frame(alphabets = alphabets[1:4],numbers=numbers[1:4])
df2 <- data.frame(alphabets = alphabets[1:4],numbers=numbers[1:4])
df3 <- data.frame(alphabets = alphabets,numbers=numbers)
tab1 <- tableGrob(df1,theme = ttheme_default(),row=NULL)
tab2 <- tableGrob(df2,theme = ttheme_default(),row=NULL)
tab3 <- tableGrob(df3,theme = ttheme_default(),row=NULL)
df4 <- rbind(df1,df2)
tab4 <- tableGrob(df4,theme = ttheme_default(),row=NULL)
g2 <- combine(tab4,tab3,along = 1)#second combine operation
grid.arrange(g2)
你可以破解它并在两个数据框之间用你想要的header划一行
combine 系列函数在很大程度上是实验性的;我从 gtable 那里偷了它,它还有一些错误,但它仍然没有完全发挥作用。
IIRC 的逻辑是根据 row/column 名称进行对齐。这是合并的 g1 table 有问题的地方,因为它的行名称不是唯一的。修复它们,它工作正常,
g1$rownames <- paste0("r", seq_len(nrow(g1)))
(不用多说,欢迎PR)
每个人我都在尝试构建 table当新数据到达时动态地抓取对象,当它们可用时我生成结果。这是我尝试生成这样的 tables 但由于某种原因 combine()
函数没有按预期工作。
我的代码如下:
library(gridExtra)
library(grid)
library(ggplot2)
alphabets <- c(rep("A", 3), rep("B", 3), rep("C",3))
numbers <- c(rep(c(1,2,3), 3))
df1 <- data.frame(alphabets = alphabets[1:4],numbers=numbers[1:4])
df2 <- data.frame(alphabets = alphabets[1:4],numbers=numbers[1:4])
df3 <- data.frame(alphabets = alphabets,numbers=numbers)
tab1 <- tableGrob(df1,theme = ttheme_default(),row=NULL)
tab2 <- tableGrob(df2,theme = ttheme_default(),row=NULL)
tab3 <- tableGrob(df3,theme = ttheme_default(),row=NULL)
g1 <- combine(tab1,tab2,along = 2)# 1st combine operation
g2 <- combine(g1,tab3,along = 1)#second combine operation
grid.arrange(g2)
输出缺少来自 g1 tableGrob 对象的 table。
知道为什么会这样吗?
你可以像这样绑定两个数据框吗?
alphabets <- c(rep("A", 3), rep("B", 3), rep("C",3))
numbers <- c(rep(c(1,2,3), 3))
df1 <- data.frame(alphabets = alphabets[1:4],numbers=numbers[1:4])
df2 <- data.frame(alphabets = alphabets[1:4],numbers=numbers[1:4])
df3 <- data.frame(alphabets = alphabets,numbers=numbers)
tab1 <- tableGrob(df1,theme = ttheme_default(),row=NULL)
tab2 <- tableGrob(df2,theme = ttheme_default(),row=NULL)
tab3 <- tableGrob(df3,theme = ttheme_default(),row=NULL)
df4 <- rbind(df1,df2)
tab4 <- tableGrob(df4,theme = ttheme_default(),row=NULL)
g2 <- combine(tab4,tab3,along = 1)#second combine operation
grid.arrange(g2)
你可以破解它并在两个数据框之间用你想要的header划一行
combine 系列函数在很大程度上是实验性的;我从 gtable 那里偷了它,它还有一些错误,但它仍然没有完全发挥作用。 IIRC 的逻辑是根据 row/column 名称进行对齐。这是合并的 g1 table 有问题的地方,因为它的行名称不是唯一的。修复它们,它工作正常,
g1$rownames <- paste0("r", seq_len(nrow(g1)))
(不用多说,欢迎PR)