# library gridExtra and grid packages #
library(gridExtra)
library(grid)
# Basic usage #
# d is data.frame #
d <- head(iris[,1:3])
grid.table(d)
# grid.newpage() 開新桌布 #
# 避免圖表疊在一起 #
grid.newpage()
d[2,3] <- "this is very wwwwwide"
d[1,2] <- "this\nis\ntall"
colnames(d) <- c("alpha*integral(xdx,a,infinity)",
"this text\nis high", 'sigma/beta')
cc <- ttheme_default(colhead=list(fg_params = list(parse=TRUE)))
grid.table(d, theme=cc)
rownames(d) <- c("beta/alpha","mu",'sigma','lambda','sigma^2','delta')
rr <- ttheme_default(rowhead=list(fg_params = list(parse=TRUE)))
grid.table(d, theme=rr)
bb <- ttheme_default(colhead=list(fg_params = list(parse=TRUE)),rowhead=list(fg_params = list(parse=TRUE)))
grid.table(d,theme=bb)
# 比較ttheme_default and ttheme_minimal
# 表格格式由 ttheme_default and ttheme_minimal 兩個函式建構 #
# ttheme_minimal 不秀出格線 #
tt1 <- ttheme_default()
tt2 <- ttheme_minimal()
grid.arrange(
tableGrob(iris[1:4, 1:2], theme=tt1),
tableGrob(iris[1:4, 1:2], theme=tt2),
nrow=1)
tt3 <- ttheme_minimal(
core=list(bg_params = list(fill = blues9[1:4], col=NA),
fg_params=list(fontface=3)),
colhead=list(fg_params=list(col="darkblue", fontface=4L)),
rowhead=list(fg_params=list(col="orange", fontface=3L)))
grid.table(iris[1:4, 1:2], theme=tt3)
# 製造梯度顏色 #
# 橘漸層到白 #
colors <- colorRampPalette(c("orange", "white"))(4)
colors
## [1] "#FFA500" "#FFC355" "#FFE1AA" "#FFFFFF"
# 細微調整 #
# col改變顏色 #
# fontface ???? #
tt3 <- ttheme_minimal(
core=list(bg_params = list(fill = colors[1:4], col=1),
fg_params=list(fontface=1)),
colhead=list(fg_params=list(col="red", fontface=4L)),
rowhead=list(fg_params=list(col="orange", fontface=3L)))
grid.table(iris[1:4, 1:2], theme=tt3)
# 結合
colors <- colorRampPalette(c("yellow", "white"))(6)
rr <- ttheme_minimal(
core=list(bg_params = list(fill = colors[1:6], col=NA),
fg_params=list(fontface=3)),
rowhead=list(fg_params = list(parse=TRUE,col="orange", fontface=3L)),
colhead=list(fg_params = list(parse=TRUE,col="darkblue", fontface=7L))
)
grid.table(d, theme=rr)
# About hjust, vjust
# hjust = 1 靠右, = 0 靠左 #
# vjust = 1 靠上, = 0 靠下 #
tt1 <- ttheme_default()
tt2 <- ttheme_default(core=list(fg_params=list(hjust=1, x=0.9)),
rowhead=list(fg_params=list(hjust=1, x=0.95)))
tt3 <- ttheme_default(core=list(fg_params=list(hjust=0, x=0.1)),
rowhead=list(fg_params=list(hjust=0, x=0)))
grid.arrange(
tableGrob(mtcars[1:4, 1:2], theme=tt1),
tableGrob(mtcars[1:4, 1:2], theme=tt2),
tableGrob(mtcars[1:4, 1:2], theme=tt3),
nrow=1)
# 修改格子大小 #
g <- g2 <- tableGrob(iris[1:4, 1:3], cols = NULL, rows=NULL)
g$widths
## [1] max(1grobwidth, 1grobwidth, 1grobwidth, 1grobwidth)+4mm
## [2] max(1grobwidth, 1grobwidth, 1grobwidth, 1grobwidth)+4mm
## [3] max(1grobwidth, 1grobwidth, 1grobwidth, 1grobwidth)+4mm
# 變更寬度 #
# 可以查看unit函數 #
g2$widths <- unit(rep(1/ncol(g2), ncol(g2)), "npc")
grid.arrange(rectGrob(), rectGrob(), nrow=1)
grid.arrange(g, g2, nrow=1, newpage = FALSE)
# 表格合併 #
d1 <- PlantGrowth[1:3,1, drop=FALSE]
d2 <- PlantGrowth[1:2,1:2]
g1 <- tableGrob(d1)
g2 <- tableGrob(d2)
# along = 1 水平結合 #
# alnog = 2 垂直結合 #
haligned <- gtable_combine(g1,g2, along=1)
# 一行 #
valigned <- gtable_combine(g1,g2, along=2)
grid.newpage()
grid.arrange(haligned, valigned, ncol=2)
使用rectGrob
# 分別加入隔線 #
# b 為總列數(預設為1),t為從最上面數下來第幾行開始畫 #
# r 為總列數(預設為1),l為從最左邊往右數第幾列開始畫 #
library(gtable)
grid.newpage()
# rows = NULL 不讀進label那一行 #
g <- tableGrob(iris[1:4, 1:3], rows = NULL)
g <- gtable_add_grob(g,
grobs = rectGrob(gp = gpar(fill = NA, lwd = 8)),
t = 4, b = nrow(g), l = 1, r = ncol(g))
g <- gtable_add_grob(g,
grobs = rectGrob(gp = gpar(fill = NA, lwd = 2)),
t = 1, l = 1, r = ncol(g))
grid.draw(g)
# 基本x 1 unit長為 t列到 b列的距離 ,y 1 unit 長為 l行到 r行
grid.newpage()
g <- tableGrob(iris[1:4, 1:3])
g <- gtable_add_grob(g,
grobs = segmentsGrob( # line across the bottom
x0 = unit(0,"npc"),
y0 = unit(0,"npc"),
x1 = unit(1,"npc"),
y1 = unit(1,"npc"),
gp = gpar(lwd = 2.0)),
t = 3, b = 4, l = 3, r = 3)
grid.draw(g)
# 交叉線 #
grid.newpage()
g <- tableGrob(iris[1:4, 1:3])
g <- gtable_add_grob(g,
grobs = grobTree(
segmentsGrob( # diagonal line ul -> lr
x0 = unit(0,"npc"),
y0 = unit(1,"npc"),
x1 = unit(1,"npc"),
y1 = unit(0,"npc"),
gp = gpar(lwd = 2.0,col = 'red')),
segmentsGrob( # diagonal line ll -> ur
x0 = unit(0,"npc"),
y0 = unit(0,"npc"),
x1 = unit(1,"npc"),
y1 = unit(1,"npc"),
gp = gpar(lwd = 2.0,col ='blue'))),
t = 3, b = 3, l = 3, r = 3)
grid.draw(g)
# 在每行左邊加上虛線
grid.newpage()
g <- tableGrob(head(iris), theme = ttheme_minimal())
separators <- replicate(ncol(g) - 2,
segmentsGrob(x1 = unit(0, "npc"), gp=gpar(lty=2)),
simplify=FALSE)
## add vertical lines on the left side of columns (after 2nd)
g <- gtable::gtable_add_grob(g, grobs = separators,
t = 2, b = nrow(g), l = seq_len(ncol(g)-2)+2)
grid.draw(g)
# 在每列上方加上虛線
grid.newpage()
g <- tableGrob(head(iris), theme = ttheme_minimal())
separators <- replicate(nrow(g) - 1,
segmentsGrob(x0 = unit(0,"npc"),
y0 = unit(1,"npc"),
x1 = unit(1,"npc"),
y1 = unit(1,"npc"), gp=gpar(lty=2)),
simplify=FALSE)
## add vertical lines on the left side of columns (after 2nd)
g <- gtable::gtable_add_grob(g, grobs = separators,
t = seq_len(nrow(g)-1)+1, l = 2, r = 6)
grid.draw(g)