ReporteRs 包可以创建 word,ppt,html 文档。它可以格式化 R 的输出:
如可编辑的矢量图,复杂的表格报告功能,企业模板文档的重用(.docx
和.pptx)。它是一个很好的自动化报告工具,并且不需要你安装微软的
任何产品。本文演示的是如何用它来制作 PPT 文档。
目录 |
|||
第一章 入门………………………………………………………………………………………………………………….. |
3 |
||
1.1 |
创建一个 pptx 对象 ………………………………………………………………………………………….. |
3 |
|
1.2 |
将 R 的输出结果发送到一个对象………………………………………………………………………. |
3 |
|
1.3 |
将对象写入到一个文件中 …………………………………………………………………………………… |
3 |
|
1.3.1 |
示例…………………………………………………………………………………………………………. |
3 |
|
第二章 模板、版式和样式 ………………………………………………………………………………………………. |
4 |
||
第三章 添加内容 …………………………………………………………………………………………………………… |
5 |
||
3.1 |
添加幻灯片………………………………………………………………………………………………………… |
5 |
|
3.2 |
将 R 的输出结果发送到幻灯片……………………………………………………………………………. |
6 |
|
3.3 |
函数列表………………………………………………………………………………………………………….. |
6 |
|
3.4 |
几个关键的函数和参数 …………………………………………………………………………………… |
6 |
|
3.4.1 |
AddSlide 函数 …………………………………………………………………………………………. |
6 |
|
3.4.2 |
Slide.layouts 函数 ……………………………………………………………………………………. |
7 |
|
3.5 |
设置大小和位置 ……………………………………………………………………………………………….. |
7 |
|
3.6 |
几个特殊函数…………………………………………………………………………………………………….. |
8 |
|
3.6.1 |
日期形函数 …………………………………………………………………………………………….. |
8 |
|
3.6.2 |
页数…………………………………………………………………………………………………………. |
9 |
|
3.6.3 |
页脚…………………………………………………………………………………………………………. |
9 |
|
3.6.4 |
副标题……………………………………………………………………………………………………. |
9 |
|
3.6.5 |
更换幻灯片 …………………………………………………………………………………………… |
10 |
|
第四章 实例分析 …………………………………………………………………………………………………………. |
10 |
第一章 入门
1.1 创建一个 pptx 对象
通过 pptx 函数创建的一个 R 对象可以表示一个 PPT 文档。它包含两个参
数:标题和模板文件。如果未指定,模板文件在包目录下是一个空文档。
每当创建一个 pptx 对象的时候,你就可以使用一个模板文件。这个文件是从内存中复制过来的,并且副本可以通过 R 输出为一个文档。模板文件提供了可用的格式和幻灯片板式。
1.2 将 R 的输出结果发送到一个对象
接下来,创建 pptx 文件的组成部分。
在将 R 的输出发送到一个文档(或幻灯片)之前,必须添加一个幻灯片。通过函数 addSlide 可以实现。
在添加幻灯片的时候,需要选定一个布局。然后添加文本,表格,图形和其它组成部分。
1.3 将对象写入到一个文件中
最后,使用函数 writeDoc 将对象写入到后缀为.pptx 的文件中。
1.3.1 示例
下面我们通过一个带有注解的 R 脚本来做演示:
library( ReporteRs ) # 创建一个 pptx 对象的文档(默认模板) mydoc = pptx( ) # 检测布局名称 slide.layouts(mydoc) mydoc = addSlide( mydoc, "Two Content" ) # 将 iris 数据集的前 10 行添加到 mydoc mydoc = addTitle( mydoc, "First 10 lines of iris" ) mydoc = addFlexTable( mydoc, FlexTable(iris[1:10,] ) ) # 在 mydoc 中添加文本(之前是一个空行) # 属性值由正在使用的布局格式给定 mydoc = addParagraph( mydoc, value = c("", "Hello World!") ) mydoc = addSlide( mydoc, "Title and Content" ) # 在 mydoc 中添加图形 mydoc = addPlot( mydoc, function() barplot( 1:8, col = 1:8 ) ) # 将 mydoc 写入文档中(在当前工作目录下会生成一个 ppt) writeDoc( mydoc, "pp_simple_example.pptx" )
第二章 模板、版式和样式
pptx 函数可以通过"pptx"模板文件创建一个文档。
如果没有提供,可以使用一个空文档(在包目录下的 templates 文件中可以找到)
# 使用 D:/docs/template/my_corporate_template.pptx 作为模板(需在上述路径先创建一个名称为 my_corporate_template.pptx 的 ppt,否则提示文件无效)
doc = pptx(template = 'D:/docs/template/my_corporate_template.pptx')
# 使用默认模板
doc = pptx()
ReporteRs 使用 PPT 文件作为模板。这个模板是一个最原始的 PPT 文档,所有的幻灯片布局,外形(占位符)和样式来自于:
• 模板中可用的幻灯片版式
• 模板中自定义好的设计,模板格式和外形(模板中的占位符)
• ppt 模板的内容不会被删除,以便在现有的演示文稿中添加内容,而不用再复制粘贴。
如果需要除去 PPT 内置的幻灯片母版版式,可以在你的 PPT 演示文稿中添加版式并做自定义。要添加自己的版式,只需在 PPT 中按如下操作即可:
1. 切换到幻灯片母版视图
2. 插入版式
3. 插入你想要增加到新版式中的占位符。根据需要包含的内容移动并调整它们的大小。
4. 可以对新的占位符做些设置(如:修改背景颜色,字体等)
5. 保存并关闭模板
6. 通过pptx 函数中参数template 所指定的模板文件名创建一个pptx 对象。
第三章 添加内容
3.1 添加幻灯片
利用 addSlide 函数可以在 pptx 对象中添加一个幻灯片。可用的形状数根据所选的版式通过 R 输出来填充。例如,版式"Title and Content"只能接收一个 R 输出,"Two Content"可以接收两个 R 输出。
如果你需要一个新的版式,在 PPT 中创建它。
当添加一个 R 输出的时候,如果没有指定位置和大小,R 输出会采用被定义
的模板版式中的位置和尺寸。如果你不喜欢模板中的模型位置属性,可以强制改
变大小和位置。
3.2 将 R 的输出结果发送到幻灯片
接下来,创建幻灯片的组成部分。在幻灯片中添加文本,表格,图形和其它
组成部分。可用的函数见如下函数列表。如果现在的幻灯片没有剩余空间或者是
你想添加其它内容,可以强制设定模型的大小和位置。具体可参考几个关键的函
数和参数
3.3 函数列表
下面这些函数只能用于输出格式为 pptx 的文档:
• 添加标题:addTitle
• 添加表格:addFlexTable-见 FlexTable 和 addFlexTable
• 添加图形:见 addPlot
• 添加外部图像:见 addImage
• 添加文本段落:addPagraph
• 添加语法高亮的 R 代码:见 addRScript
• 添加幻灯片:addSlide(见"几个关键的函数和参数")
• 将 pptx 对象写入 PPT 文档:见 writeDoc
• 添加日期:addDate(见下述"几个特殊函数")
• 添加脚注:addFooter(见下述"几个特殊函数")
• 添加页数:addPageNumber(见下述"几个特殊函数")
3.4 几个关键的函数和参数
3.4.1 AddSlide 函数
函数 addSlide 可以添加一个幻灯片到 pptx 对象。参数 slide.layout 指定新建幻灯片的版式设计。
oc = pptx() doc = addSlide( doc, slide.layout = 'Title and Content' ) doc = addSlide( doc, slide.layout = 'Two Content' )
3.4.2 Slide.layouts 函数
模板中包含了可用的版式。幻灯片的版式概念在 ReporteRs 中非常重要。
内容取决于所选择的版式。当添加的幻灯片版式为"Title and Content"时,幻灯片只包含两个部分:标题和内容。
外形(或占位符)的大部分格式都已经设置好了:图形的大小由版式中的外形尺寸指定好了,默认字体和段落样式也由外形的属性值指定。
slide.layouts 返回幻灯片版式名称。用 addSlide 函数添加一个幻灯片的时候可能需要核对下有哪些版式可用。
doc = pptx() slide.layouts(doc)
检查幻灯片版式。通过 slide.layouts 函数的可选参数 layout 获取版式的设计
图。
slide.layouts(doc, 'Comparison')
这里,幻灯片可用接收如下形状:标题,四个内容(图形,表格,段落),日期和幻灯片数。
3.5 设置大小和位置
宽度,高度和输出位置在 PPT 模板给定的时候就通过外形属性值设定好了。
当我们在幻灯片中添加内容的时候,ReporteRs 会在当前幻灯片中读取下一个可
用外形的属性值。你可以指定一些特定输出(表格,文本,图形和外部图像)的外形位置和尺寸 如果没有设定 offx,offy,width,heigh 这些参数。位置的尺寸会通过幻灯片的下一个可用形状中的 width 和 heigh 默认设定好。 如果指定这些参数,可以得到新的外形位置和尺寸。这样做可以在幻灯片没有更多剩余的空间时添加新的内容。
library( ReporteRs ) library( ggplot2 ) mydoc = pptx( title = "title" ) mydoc = addSlide( mydoc, slide.layout = "Title and Content" ) myplot = qplot(Sepal.Length, Petal.Length, data = iris,color = Species, size = Petal.Width, alpha = I(0.7) ) mydoc = addPlot( doc = mydoc, fun = print, x = myplot,offx = 1, offy = 1, width = 6, height = 5 ) mydoc = addFlexTable( doc = mydoc, FlexTable( head( iris ) ),offx = 8, offy = 2, width = 4.5, height = 3 ) writeDoc( mydoc, file = "examples/pp_force_pos.pptx" )
3.6 几个特殊函数
3.6.1 日期形函数
利用 addDate 函数可以在幻灯片中增加日期。它的外形通过模板文档中的日期外形属性值设定。
doc = pptx() doc = addSlide( doc, slide.layout = 'Title and Content' ) doc = addDate( doc ) doc = addSlide( doc, slide.layout = 'Title and Content' ) doc = addDate( doc, 'Dummy date' )
3.6.2 页数
利用函数 addPageNumber 可以在幻灯片中添加幻灯片的页数。同样,它的外形通过模板文档中的页数外形属性值设定。
doc = pptx() doc = addSlide( doc, slide.layout = 'Title and Content' ) doc = addPageNumber( doc ) doc = addSlide( doc, slide.layout = 'Title and Content' ) doc = addPageNumber( doc, 'Dummy text' )
3.6.3 页脚
函数 addFooter 可以实现在幻灯片的页脚处添加注解。同样,通过模板文件默认设定。
doc = pptx() doc = addSlide( doc, slide.layout = 'Title and Content' ) doc = addFooter( doc, 'Dummy text' )
3.6.4 副标题
函数 addSubtitle 实现在幻灯片中添加副标题。外形由模板默认设定。副标题的外形只存在类型为"Title Slide"的幻灯片。
doc = pptx() doc = addSlide( doc, slide.layout = 'Title Slide' ) doc = addTitle( doc, 'Presentation title' ) doc = addSubtitle( doc , 'This document is generated with ReporteRs. ')
3.6.5 更换幻灯片
通过设定 addSlide 中的参数 bookmark 可以实现幻灯片的替换。
library( ReporteRs ) library( ggplot2 ) #需提前在你的工作目录下新建一个名为"pp_example.pptx"的文档 mydoc = pptx( title = 'title', template = 'pp_example.pptx' ) myplot = qplot(Sepal.Length, Petal.Length, data = iris, color = Speci es, size = Petal.Width, alpha = I(0.7)) mydoc = addSlide( mydoc, slide.layout = 'Title and Content', bookmark = 3 ) mydoc = addTitle( mydoc, 'my new graph') mydoc = addPlot( mydoc, print, x = myplot ) writeDoc( mydoc, 'examples/pp_replacement.pptx' )
第四章 实例分析
下面的代码展示了可以用在 pptx 对象上的一些最有用的函数。
library( ReporteRs ) require( ggplot2 ) mydoc = pptx( title = "title" ) # 显示版式名称 slide.layouts( mydoc ) # 添加一个 Title slide ---------------------------------------------- mydoc = addSlide( mydoc, slide.layout = "Title Slide" ) mydoc = addTitle( mydoc, "Presentation title" ) #设置主标题 mydoc = addSubtitle( mydoc , "This document is generated with Reporte Rs.")#设置副标题 # 图形演示 ---------------------------------------------------------- mydoc = addSlide( mydoc, slide.layout = "Title and Content" ) mydoc = addTitle( mydoc, "Plot examples" ) myplot = qplot(Sepal.Length, Petal.Length , data = iris, color = Spec ies, size = Petal.Width, alpha = I(0.7)) # 将图形添加到 ppt mydoc = addPlot( mydoc, function( ) print( myplot ) ) # 添加页数,日期,脚注 mydoc = addPageNumber(mydoc) mydoc = addDate(mydoc) mydoc = addFooter(mydoc, "Modify the graph within PowerPoint") # 表格演示---------------------------------------------------------- mydoc = addSlide( mydoc, slide.layout = "Title and Content" ) mydoc = addTitle( mydoc, "FlexTable example" ) options( "ReporteRs-fontsize" = 12 ) # 将 mtcars 数据框对象创建为一个可伸缩的表格并显示行名 # 将表头和表体设置为不同的格式属性 MyFTable = FlexTable( data = mtcars[1:15,], add.rownames = TRUE , bod y.cell.props = cellProperties( border.color = "#EDBD3E"), header.cel l.props = cellProperties( background.color = "#5B7778" )) # 斑马线 - 表行的颜色背景是交替出现的 MyFTable = setZebraStyle( MyFTable, odd = "#DDDDDD", even = "#FFFFFF" ) MyFTable = setFlexTableWidths( MyFTable, widths = c(2,rep(.7,11))) # 设置表格边框线 MyFTable = setFlexTableBorders(MyFTable, inner.vertical = borderPrope rties( color="#EDBD3E", style="dotted" ), inner.horizontal = borderPr operties( color = "#EDBD3E", style = "none" ) , outer.vertical = bord erProperties( color = "#EDBD3E", style = "solid" ) , outer.horizontal = borderProperties( color = "#EDBD3E", style = "solid" )) # 添加可伸缩表格 mydoc = addFlexTable( mydoc, MyFTable ) # 文本演示 ---------------------------------------------------------- # 设置默认字体大小为 26 options( "ReporteRs-fontsize" = 26 ) # 添加一个版式为"Two Content"的幻灯片 mydoc = addSlide( mydoc, slide.layout = "Two Content" ) # 添加标题 mydoc = addTitle( mydoc, "Texts demo" ) texts = c( "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", "In sit amet ipsum tellus. Vivamus dignissim arcu sit amet faucibus auctor.", "Quisque dictum tr istique ligula.") # 添加文本 mydoc = addParagraph( mydoc, value = texts ) # 添加内容 "My tailor is rich" 和 "Cats and Dogs" # 设置文本中某些片段的格式 pot1 = pot("My tailor" , textProperties(color="red" ) ) + " is " + po t("rich", textProperties(font.weight="bold") ) pot2 = pot("Cats", textProperties(color="red" ) ) + " and " + pot("Do gs", textProperties(color="blue" ) ) mydoc = addParagraph(mydoc, set_of_paragraphs( pot1, pot2 ) ) writeDoc( mydoc, file = "examples/pp_long_demo.pptx" )