You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 19:23:17