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

posted @ 2018-05-05 15:50  悦光阴  阅读(10485)  评论(1编辑  收藏  举报