ReporteRs
包能够建立word,ppt,html文档。它能够格式化R的输出:如可编辑的矢量图,复杂的表格报告功能,企业模板文档的重用(.docx和.pptx)。它是一个很好的自动化报告工具,而且不须要你安装微软的任何产品。须要注意的是,电脑需安装了java(>=1.6)本文演示的是如何用它来制做PPT文档。html
经过pptx
函数建立的一个R对象能够表示一个PPT文档。它包含两个参数:标题和模板文件。若是未指定,模板文件在包目录下是一个空文档。java
每当建立一个pptx对象的时候,你就可使用一个模板文件。这个文件是从内存中复制过来的,而且副本能够经过R输出为一个文档。模板文件提供了可用的格式和幻灯片版式。git
接下来,建立pptx文件的组成部分。github
在将R的输出发送到一个文档(或幻灯片)以前,必须添加一个幻灯片。经过函数addSlide
能够实现。ide
在添加幻灯片的时候,须要选定一个布局。而后添加文本,表格,图形和其它组成部分。函数
最后,使用函数writeDoc
将对象写入到后缀为.pptx
的文件中。工具
下面咱们经过一个带有注解的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中添加文本(从addParagraph函数的value参数能够看出第一行为空行) # 属性值由正在使用的布局格式给定 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文件中能够找到)ui
# 使用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中按以下操做便可:
切换到幻灯片母版视图
插入版式
插入你想要增长到新版式中的占位符。根据须要包含的内容移动并调整它们的大小。
能够对新的占位符作些设置(如:修改背景颜色,字体等)
保存并关闭模板
经过pptx函数中参数template
所指定的模板文件名建立一个pptx
对象。
关于模板的更多了解,参考这里
利用addSlide
函数能够在pptx对象中添加一个幻灯片。可用的形状数根据所选的版式经过R输出来填充。例如,版式"Title and Content"只能接收一个R输出,"Two Content"能够接收两个R输出。
若是你须要一个新的版式,在PPT中建立它。
当添加一个R输出的时候,若是没有指定位置和大小,R输出会采用被定义的模板版式中的位置和尺寸。若是你不喜欢模板中的模型位置属性,能够强制改变大小和位置。
接下来,建立幻灯片的组成部分。
在幻灯片中添加文本,表格,图形和其它组成部分。可用的函数见以下函数列表。
若是如今的幻灯片没有剩余空间或者是你想添加其它内容,能够强制设定模型的大小和位置。具体可参考几个关键的函数和参数
下面这些函数能够用于输出格式为pptx的文档:
添加标题:addTitle
添加表格:addFlexTable-见FlexTable和addFlexTable
添加图形:见addPlot
添加外部图像:见addImage
添加文本段落:addPagraph
添加语法高亮的R代码:见addRScript
添加幻灯片:addSlide(见"几个关键的函数和参数")
将pptx对象写入PPT文档:见writeDoc
添加日期:addDate(见下述"几个特殊函数")
添加脚注:addFooter(见下述"几个特殊函数")
添加页数:addPageNumber(见下述"几个特殊函数")
函数addSlide
能够添加一个幻灯片到pptx对象。参数slide.layout
指定新建幻灯片的版式设计。
oc = pptx() doc = addSlide( doc, slide.layout = 'Title and Content' ) doc = addSlide( doc, slide.layout = 'Two Content' )
模板中包含了可用的版式。幻灯片的版式概念在ReporteRs
中很是重要。
内容取决于所选择的版式。当添加的幻灯片版式为"Title and Content"时,幻灯片只包含两个部分:标题和内容。
外形(或占位符)的大部分格式都已经设置好了:图形的大小由版式中的外形尺寸指定好了,默认字体和段落样式也由外形的属性值指定。
slide.layouts
返回幻灯片版式名称。用addSlide
函数添加一个幻灯片的时候可能须要核对下有哪些版式可用。
doc = pptx() slide.layouts(doc)
检查幻灯片版式
经过slide.layouts
函数的可选参数layout
获取版式的设计图。
slide.layouts(doc, 'Comparison')
这里,幻灯片可用接收以下形状:标题,四个内容(图形,表格,段落),日期和幻灯片数。
宽度,高度和输出位置在PPT模板给定的时候就经过外形属性值设定好了。当咱们在幻灯片中添加内容的时候,ReporteRs
会在当前幻灯片中读取下一个可用外形的属性值。你能够指定一些特定输出(表格,文本,图形和外部图像)的外形位置和尺寸 若是没有设定offx
,offy
,width
,heigh
这些参数。位置的尺寸会经过幻灯片的下一个可用形状中的width和heigh默认设定好。 若是指定这些参数,能够获得新的外形位置和尺寸。这样作能够在幻灯片没有更多剩余的空间时添加新的内容。
如下R脚本能够生成
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" )
利用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' )
利用函数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' )
函数addFooter
能够实如今幻灯片的页脚处添加注解。一样,经过模板文件默认设定。
doc = pptx() doc = addSlide( doc, slide.layout = 'Title and Content' ) doc = addFooter( doc, 'Dummy text' )
函数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.')
经过设定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 = Species, 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, 'pp_replacement.pptx' )
注:在本文中遇到的坑跟你们分享下。
前面已经提到建立一个模板有两种方法。方法一,mydoc = pptx()
经过调用包目录下templates文件夹中的EMPTY_DOC.pptx做为模板。方法二,本身在当前工做目录下新建一个ppt文档做为模板。如:我在工做目录下新建了一个名为"PP_example.pptx"文档,经过mydoc = pptx( title = 'title', template = 'pp_example.pptx' )
调用这个模板。这两种方法会有些区别:i)版式
采用方法一
slide.layouts(mydoc) [1] "Blank" [2] "Title Only" [3] "Title and Content" [4] "Section Header" [5] "Title and Vertical Text" [6] "Comparison" [7] "Content with Caption" [8] "Title Slide" [9] "Two Content" [10] "Vertical Title and Text"
采用方法二
slide.layouts(mydoc) [1] "比较" "仅标题" "图片与标题" [4] "垂直排列标题与文本" "节标题" "标题和竖排文字" [7] "两栏内容" "标题和内容" "空白" [10] "内容与标题" "标题幻灯片"
因此,若是用的是方法二调用的模板,在作幻灯片替换的时候作下中文设置便可:mydoc = addSlide( mydoc, slide.layout = '标题和内容', bookmark = 3 )
。但这里有一个问题就是没法插入图形,出现以下错误(若是有小伙伴解决了这个问题欢迎在下面评论中留言):
mydoc = addPlot( mydoc, print, x = myplot ) Error in .jcall(doc$obj, paste0("L", class.pptx4r.LayoutDescription, ";"), : java.lang.NullPointerException
但文本,表格等能够插入。但经过方法一获得一个ppt文档,再把它做为模板后就能够插入图形了。
在作幻灯片替换的过程当中,将pptx对象writeDoc()
到ppt文档的时候ppt需先关闭。
用方法二做为模板的时候,需先在工做目录下新建一个ppt文档,不然提示文件不存在。
下面的代码展现了能够用在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 ReporteRs.")#设置副标题 # 图形演示 --------------------------------------------------------------- mydoc = addSlide( mydoc, slide.layout = "Title and Content" ) mydoc = addTitle( mydoc, "Plot examples" ) myplot = qplot(Sepal.Length, Petal.Length , data = iris, color = Species , 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 , body.cell.props = cellProperties( border.color = "#EDBD3E") , header.cell.props = cellProperties( background.color = "#5B7778" ) ) # 斑马线 - 表行的颜色背景是交替出现的 MyFTable = setZebraStyle( MyFTable, odd = "#DDDDDD", even = "#FFFFFF" ) MyFTable = setFlexTableWidths( MyFTable, widths = c(2,rep(.7,12))) # 设置表格边框线 MyFTable = setFlexTableBorders(MyFTable , inner.vertical = borderProperties( color="#EDBD3E", style="dotted" ) , inner.horizontal = borderProperties( color = "#EDBD3E", style = "none" ) , outer.vertical = borderProperties( 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 tristique ligula." ) # 添加文本 mydoc = addParagraph( mydoc, value = texts ) # 添加内容 "My tailor is rich" 和 "Cats and Dogs" # 设置文本中某些片断的格式 pot1 = pot("My tailor" , textProperties(color="red" ) ) + " is " + pot("rich", textProperties(font.weight="bold") ) pot2 = pot("Cats", textProperties(color="red" ) ) + " and " + pot("Dogs", textProperties(color="blue" ) ) mydoc = addParagraph(mydoc, set_of_paragraphs( pot1, pot2 ) ) writeDoc( mydoc, file = "pp_long_demo.pptx" )
关于ReporteRs的更多信息请参考http://davidgohel.github.io/ReporteRs/index.html
本文由雪晴数据网负责翻译整理,原文请参考Create PowerPoint documents from R做者David Gohel。转载请注明本文连接http://www.xueqing.cc/cms/article/118