如何将eulerr包绘制的欧拉图可编辑导出至PowerPoint?
问题:将eulerr绘制的欧拉图导出为可编辑的PowerPoint元素
用户使用eulerr包绘制欧拉图,代码如下:
fit <- euler(c( "A" = 10000, "B" = 7000, "A&B" = 600)) plot(fit, quantities = list(fontsize = 9), fills = c("#8ABDAF", "#DC8E8D"), fontsize = 9, main = list(label = "Title"), labels = NULL, legend = list(labels = c("A", "B")) )
需求是将这幅base R绘图导出到PowerPoint,且导出后每个元素可编辑(非图片格式)。尝试用officer+rvg的ph_with搭配dml时出现报错:
Error in read_xml.raw(charToRaw(enc2utf8(x)), "UTF-8", ..., as_html = as_html, : StartTag: invalid element name [68]
另外找不到rvg包中的ph_with_vg函数,询问解决方法。
解决方案
ph_with_vg是旧版rvg的函数,新版已整合到ph_with配合dml()使用。但base R绘图直接传入dml()会触发格式错误,需先捕获绘图记录再插入,具体步骤如下:
完整代码示例
library(eulerr) library(officer) library(rvg) # 1. 绘制并捕获欧拉图记录 fit <- euler(c( "A" = 10000, "B" = 7000, "A&B" = 600)) # 使用虚拟设备避免弹出绘图窗口,同时捕获绘图 pdf(file = NULL) plot_obj <- recordPlot() dev.off() # 2. 创建PowerPoint并插入可编辑图形 ppt <- read_pptx() ppt <- add_slide(ppt, layout = "Title and Content", master = "Office Theme") # 将捕获的绘图通过dml插入PPT ppt <- ph_with( ppt, value = dml(code = replayPlot(plot_obj)), location = ph_location_type(type = "body") ) # 保存PPT文件 print(ppt, target = "editable_euler_plot.pptx")
关键说明
- 捕获绘图记录:用
recordPlot()捕获base R绘图的完整状态,避免直接执行plot(fit)时因设备或环境差异导致的XML格式错误。 - 虚拟设备:
pdf(file = NULL)启动虚拟PDF设备,既不会生成实际文件,也能确保绘图被正确捕获,避免弹出临时绘图窗口。 - 可编辑性:导出的PPT中,欧拉图的填充色、文字、形状轮廓等元素均可直接在PowerPoint中修改,无需转换为图片。
内容的提问来源于stack exchange,提问作者Louise Sørensen
相关产品推荐
相关产品推荐

