R繪圖 第二篇:繪制表格(ggpur)


文本表是顯示數據的重要圖形,一個文本表按照區域划分為:列標題,行標題,數據區,美學特征有:前景樣式、背景樣式、字體、網格線等。由於報表上需要呈現文本表,我想到用R,R的繪圖功能很強大,我本來以為繪制文本表應該是一件非常簡單的事。可是,在搜索Google之后,我發現使用GridExtra繪制一個文本表是如此的困難,那些奇怪的參數和函數,讓人抓狂,實在沒有耐心看下去。

好在,我找到一個簡單的繪制文本表的包,ggpubr包,使用ggtexttable繪制文本表,用法非常簡單,推薦:

install.packages("ggpubr")
library(ggpubr)

但是,該包的功能不是很完善,例如,無法設置列的長度,這是比較坑爹的地方,用戶只能通過填充單元格的方式來控制文本表的寬度。

一,繪制文本表的函數

使用ggpubr包繪制一個文本表,常會用到7個基本函數:

  • ggtexttable():用於繪制文本表,並返回ggtexttable類型的對象;
  • ttheme():用於設置表的樣式,包含colnames、style,rownames.style和tbody.style;
  • rownames_style(), colnames_style(), tbody_style():用於設置列標題,行標題和數據區的樣式;
  • table_cell_font():用於設置單元格中的文本(size,face),對某一個特定的單元格進行格式的設置;
  • table_cell_bg():用於設置單元格的背景色(fill,color,linewidth),對某一個特定的單元格進行格式的設置。

這7個基本函數的定義是:

ggtexttable(x, rows = rownames(x), cols = colnames(x), vp = NULL, theme = ttheme(), ...)

ttheme(base_style = "default", base_size = 11, base_colour = "black", padding = unit(c(4, 4), "mm"), 
    colnames.style = colnames_style(size = base_size), 
    rownames.style = rownames_style(size = base_size),
    tbody.style = tbody_style(size = base_size))

colnames_style(color = "black", face = "bold", size = 12,
  fill = "grey80", linewidth = 1, linecolor = "white", parse = FALSE, ...)

rownames_style(color = "black", face = "italic", size = 12, fill = NA,
  linewidth = 1, linecolor = "white", parse = FALSE, ...)

tbody_style(color = "black", face = "plain", size = 12,
  fill = c("grey95", "grey90"), linewidth = 1, linecolor = "white", parse = FALSE, ...)

table_cell_font(tab, row, column, face = NULL, size = NULL)

table_cell_bg(tab, row, column, fill = NULL, color = NULL, linewidth = NULL)

參數注釋:

  • vp:可選的視口(viewport),viewport是一個矩形的繪圖區域。
  • parse:設置為TRUE時,表示使用文字表示符號
  • ...:額外的參數,用於設置文本對齊,例如:hjust 和 x,其中,hjust = 1 靠右,= 0 靠左,x是比例,x=0.5  表示居中
  • fill:填充的背景色,當填充數據區時,如果該參數是含有多個顏色的向量,那么R循環使用向量中顏色來填充表格的背景。
  • face:字體的效果,有效值是 c("plain", "bold", "italic", "bold.italic")
  • tab:ggtexttable類型的對象
  • base_style:系統自定義的基礎樣式,c("default", "blank", "classic", "minimal", "light", "lBlack", "lBlue", "lRed", "lGreen", "lViolet", "lCyan", "lOrange", "lBlackWhite", "lBlueWhite", "lRedWhite", "lGreenWhite", "lVioletWhite", "lCyanWhite", "lOrangeWhite", "mBlack", "mBlue", "mRed", "mGreen", "mViolet", "mCyan", "mOrange", "mBlackWhite", "mBlueWhite", "mRedWhite", "mGreenWhite", "mVioletWhite", "mCyanWhite", "mOrangeWhite" ). 注意, l = "light"; m = "medium"。
  • base_size,base_colour:默認的字體大小和顏色
  • padding:是兩個元素的向量,指定每個單元格內的文本的水平和垂直填充

二,繪制基本的文本表

把rows參數設置為NULL,表示移除行名稱;使用theme參數自定義表格顯示的樣式,hjust=1,x=0.9,表示單元格的文本靠右,間距為0.9。

df <- head(iris)
tbody.style = tbody_style(color = "black",
   fill = c("#e8f3de", "#d3e8bb"), hjust=1, x=0.9)
ggtexttable(head(iris), rows = NULL,
           theme = ttheme(
             colnames.style = colnames_style(color = "white", fill = "#8cc257"),
             tbody.style = tbody.style
           )
)

三,設置文本表的單元格

使用變量保存文本表的對象,然后對文本表的單元格進行修改:

tab <- ggtexttable(head(iris), rows = NULL, theme = ttheme("classic"))
tab <- table_cell_font(tab, row = 3, column = 2, face = "bold")
tab <- table_cell_bg(tab, row = 4, column = 3, linewidth = 5, fill="darkolivegreen1", color = "darkolivegreen4")
tab

當需要對單個單元格進行格式的修改時,可以使用這兩個函數來實現。

四,組織多個文本表

使用函數 ggarrange()把多個文本表繪制到一個畫布中。

t1 <- ggtexttable()
t2 <- ggtexttable()
ggarrange(t1, t2,  ncol = 2, nrow = 1)

 

參考文檔:

Draw a Textual Table

ggtexttable


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM