【问题标题】:Plotting a ggplot2 graph in a power point slide with a given size - R在给定大小的 power point 幻灯片中绘制 ggplot2 图形 - R
【发布时间】:2019-06-11 15:59:23
【问题描述】:

我正在尝试使用officer 包在幻灯片幻灯片中绘制ggplot2 图表。我实际上可以做到(直接在ppt中打印ggplot2),但是因为我需要增加ggplot2图形的大小(对于ppt幻灯片),我知道ggplot2图形依赖于窗口的大小(在RStudio 中)或您设置的任何内容,就好像您正在导出它一样,我正在寻找一种方法来(1)导出具有给定大小的 ggplot2 图(例如:height=5, width=8) , (2) 导入/读取ppt代码:

library(officer)
library(devEMF)
library(magrittr)
library(ggplot2)

t <- "../example.pptx"
filename <- gg

read_pptx() %>% 
  add_slide(layout = "Title and Content", master = "Office Theme") %>% 
  ph_with_img(src = filename, width = 6, height = 4, type = "body") %>% 
  print(target = t)

gg 是来自 ggplot2 的任何情节(实际上并不重要)。 t是输出文件地址。

ph_with_img

PowerPoint documents and graphics

PD:如果有一些我不知道并且我仍然找不到的包/命令,那么所有这些都是不必要的,我可以在其中编辑 ggplot2 的大小。

【问题讨论】:

  • (1)的解决方案:使用例如png()width = 8, height = 5
  • 使用导出包中的 graph2ppt 命令查看我的答案,它允许您指定宽度和高度...
  • 不需要外部保存ggplot对象或使用外部包,请看下面我的回答。

标签: r ggplot2 powerpoint officer


【解决方案1】:

我刚刚在officer 之上构建了一个新包export,它可以轻松地使用命令graph2ppt() 执行此操作,并且可以很好地以矢量格式导出,而不是上面发布的其他答案中的位图,例如

install.packages("export")
library(export)
library(ggplot2)
qplot(Sepal.Length, Petal.Length, data = iris, color = Species, 
      size = Petal.Width, alpha = I(0.7))     
graph2ppt(file="plots.pptx", width=6, height=5) 

【讨论】:

  • 这种方法可以与标准官员语言结合使用吗=例如doc &lt;- read_pptx(); doc &lt;- ph_with(x = doc, value = my_ggplot, location = ph_location_fullsize() ) - 还是仅将单个图形呈现为 pptx 页面的完整包装器?
  • 它只是一个包装器,内部使用官员,所以我唯一的目标是能够轻松导出单个图表,尽管它也允许向现有文件添加额外的图表。
【解决方案2】:

我首先成功地将ggplot2 图形保存为.png,然后将该文件调用到ph_with_img。有点迂回,但它的工作原理。您也可以将图表保存为?tempfile,然后保存为?unlink,但我有点喜欢有一个我的图表文件夹。

ggplot() +
  (code for my ggplot)

ggsave("../thisplot.png", width = 6, height = 4)

read_pptx() %>% 
  add_slide(layout = "Title and Content", master = "Office Theme") %>% 
  ph_with_img(src = "../thisplot.png", width = 6, height = 4, type = "body") %>% 
  print(target = t)

【讨论】:

  • 这种解决方案的缺点是输出是位图而不是矢量图形...我在下面发布了保留矢量格式的替代答案...
【解决方案3】:

下面展示了如何使用officer 0.3.11创建一个ggplot对象并将其作为矢量图直接导出到powerpoint。关键是使用ph_withlocation = ph_location。这允许您设置对象的位置和大小。


library(ggplot2)
library(dplyr, warn.conflicts = FALSE)
library(officer)
library(rvg)

t <- "example.pptx"

fig_gg <- ggplot(mtcars, aes(x=wt, y=mpg)) +
  geom_point()

fig_vg <- dml(ggobj = fig_gg)

read_pptx() %>% 
  add_slide(layout = "Title Only", master = "Office Theme") %>% 
  ph_with(fig_vg, location = ph_location(left = .5, top = 1.3, height = 5, width = 5)) %>% 
  print(t)

reprex package (v0.3.0) 于 2020-06-12 创建

【讨论】:

  • 除非我弄错了,这不会改变图形的大小(分辨率),而是改变页面上边界框的规范。它无法控制文本和边距的大小。
  • @geotheory 在我的示例中,更改 widthheight 的规格确实会更改 powerpoint 中图形的大小。矢量图像本身没有分辨率(与光栅/位图图像相比)。文本和边距的大小是从 ggplot 调用中控制的,例如。 fig_gg + theme(text = element_text(size=20)).
  • 在 ggplot 中正确处理所有这些内容非常繁琐。您需要一种方法来重新缩放最终绘图。
  • @geotheory 我想这是一个见仁见智的问题。从 ggplot 调用中设置选项可确保无论输出(latex、html 或 pptx)如何,图形都是一致的。我更喜欢在 pptx 中使用矢量图,因为它可以将图形保持在尽可能高的“分辨率”,满足期刊要求,允许同事在没有专业图形软件的情况下查看图像,并且如果您仍然想调整最终图可以从 powerpoint 中编辑字体大小等
  • 很公平 :) 您可以使用 theme(base_size = 20) 参数调整所有文本的相对大小。请参阅community.rstudio.com/t/ggplot-theme-with-larger-font-sizes/… 了解更多信息。
猜你喜欢
  • 1970-01-01
  • 2020-12-04
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 2019-03-18
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多