• 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

  • 相关阅读:
    越狱第三季开播了
    永远成长的苹果树
    最强最短的武侠小说
    买房和租房15年后的巨大差别[好文转载]
    秋凉了,大家别加班了,早回吧:)
    dedecms dede_archives表中arcrank和ismake两个字段的理解
    asp.net c#读取word 文档的方法
    css实现不固定长度圆角按钮,兼容所有浏览器
    js keyup、keypress和keydown事件 详解
    android中使用webview缓存网页
  • 原文地址:https://www.cnblogs.com/ljhdo/p/4489746.html
Copyright © 2020-2023  润新知