如何将R ggplot复制到剪贴板?

时间:2017-08-08 22:29:49

标签: r ggplot2

我似乎无法使用png()使bmp()ggplot等工作,而ggsave(filename="clipboard")什么都不做。 有什么想法吗?

3 个答案:

答案 0 :(得分:1)

试试这个:

dev.new()
my_plot <- ggplot(data.frame(x=1:10,y=1:10),aes(x,y)) + geom_point()
my_plot
savePlot("clipboard")

或者,如果您不想显示它

win.metafile()
my_plot2 <- ggplot(data.frame(x=1:5,y=1:5),aes(x,y)) + geom_point()
print(my_plot2)
dev.off()

相关:Save plot without showing it at all

答案 1 :(得分:0)

猜测,您是否尝试在函数,循环或外部文件中使用ggsave()?

这是一个常见的speedbump,只需简单的修复。您需要明确print该文件。

而不是:

makeplot <- function(){
    p <- gpplot(....some plotting....)
    p 
    ggsave("foo.bmp")  #or other function to save an image
}

你需要:

makeplot <- function(){
    p <- gpplot(....some plotting....)
    print(p )
    ggsave("foo.bmp")  #or other function to save an image
}

在此处查看类似问题:ggplot's qplot does not execute on sourcing

答案 2 :(得分:0)

我认为目标只是将情节放入剪贴板。我编写了一个函数来将绘图写入临时文件。由于 OP 显然是在 macOS 上,我和我一样,此功能目前仅适用于 macOS。根据需要进行调整。

plot_clipboard <- function(plot, width = 7, height = 6, device_fn = cairo_pdf) {

  # determine required file extension based on input for device_fn
  file_type <- deparse(substitute(device_fn))
  file_type <- gsub(".*(.{3})$", "\\1", file_type)
  tmpfile <- tempfile(fileext = paste0(".", file_type))

  # save plot to temp file
  device_fn(filename = tmpfile, width = width, height = height)
  print(plot)
  dev.off()

  message("Saved plot to temp file: ", tmpfile)

  # and copy this file into the clipboard
  sysname <- tolower(Sys.info()["sysname"])
  if (sysname == "darwin") {
    # macOS, make use of Applescript
    out <- system(command = paste0("osascript -e 'on run args' -e 'set the clipboard to POSIX file (first item of args)' -e end \"$@\"", tmpfile), intern = TRUE)
  # } else if (sysname == "windows") {
  #   # something for Windows here
  } else {
    message("Sorry, you're on your own!")
  }
}

它仍然在进行中。在 Finder 中粘贴工作正常,但粘贴到 Word 文档中则不行(而 Word 正确地表示将要粘贴“文件”对象)。

对于撰写科学手稿,我仍在寻找一种功能,该功能可以编写可立即粘贴到 Word 中的 PDF 文件(因此不会造成质量损失),从而使我只需执行以下操作即可从 R 转到 Word:

analysis.1.2.3 <- my_research_data %>%
  ggplot() +
  geom_col() +
  younameit()

analysis.1.2.3 %>% plot_clipboard()

然后在 Word 中使用 Cmd+V。正如我所说,正在进行中:)