文本表是显示数据的重要图形,一个文本表按照区域划分为:列标题,行标题,数据区,美学特征有:前景样式、背景样式、字体、网格线等。由于报表上需要呈现文本表,我想到用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 = , base_colour = "black", padding = unit(c(, ), "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 = ,
fill = "grey80", linewidth = , linecolor = "white", parse = FALSE, ...) rownames_style(color = "black", face = "italic", size = , fill = NA,
linewidth = , linecolor = "white", parse = FALSE, ...) tbody_style(color = "black", face = "plain", size = ,
fill = c("grey95", "grey90"), linewidth = , 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=, 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 = , column = , face = "bold")
tab <- table_cell_bg(tab, row = , column = , linewidth = , fill="darkolivegreen1", color = "darkolivegreen4")
tab

当需要对单个单元格进行格式的修改时,可以使用这两个函数来实现。

四,组织多个文本表

使用函数 ggarrange()把多个文本表绘制到一个画布中。

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

参考文档:

Draw a Textual Table

ggtexttable

最新文章

  1. seL4环境配置
  2. okhttp封装时,提示 cannot resolve method OkHttpClient setConnectTimeout() 函数
  3. Delphi XE8,C++ Builder XE8,RAD Studio XE8 官方 ISO 文件下载,附激活工具
  4. hdu2085
  5. IntelliJ IDEA 集成Tomcat后找不到HttpServlet问题(2015年06月13日)
  6. jquery easyui treegrid使用小结
  7. 将日志写入Debug窗口
  8. Android 自定义shape圆形按钮
  9. Linux CentOS7.0 (01)在Vmvare Workstation上 安装配置
  10. Linux之Ubuntu下安装屏幕录像软件(SimpleScreenRecorder)【摘抄】
  11. 10分钟搭建Kubernetes容器集群平台【转】
  12. javascript转义unicode十六进制编码且带有反斜杠后的html
  13. 29、sass
  14. lambda表达式,filter,map,reduce,curry,打包与解包和
  15. MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结
  16. topcoder srm 470 div1
  17. C++复习:C++的类型转换
  18. [转]使用C#调用cmd来执行sql脚本
  19. LeakCanary 原理浅析
  20. Nutch的安装和配置

热门文章

  1. UNIX/LINUX程序设计教程(1)-- 获取系统信息
  2. (NO.00004)iOS实现打砖块游戏(七):关卡类的实现
  3. 1、MyEclipse插件配置以及通过MyEclipse生成表对应的JPA代码
  4. RAMCloud:内存云存储的内存分配机制
  5. 平述factory reset ——从main system到重引导流程
  6. 【一天一道LeetCode】#130. Surrounded Regions
  7. 安卓手机与ROS通信遥控Gazebo中仿真机器人小车运动(ROS_indigo)
  8. μC/OS-II与RT-Thread对比——任务调度
  9. C++ Primer 有感(重载操作符)
  10. linux:你不知道的echo