【问题标题】:Capturing graphical output/plots from R and saving them for later upscaling/downscaling [closed]从 R 捕获图形输出/绘图并将它们保存以供以后放大/缩小 [关闭]
【发布时间】:2015-08-14 02:22:20
【问题描述】:

现在,我正在使用 R 和 Shiny 创建一个工作流工具,但我有兴趣创建某种功能来“保存”作为数据分析等过程的一部分创建的图表。

代码不是为了方便用户在我在 web 应用程序上的 GUI 中保存他们自己的图形,但 我想知道 R 是否有能力“捕捉”正在呈现的图形,或者也许设备,然后将它们保存到一个向量或设备数组中以供以后提取。最好可以放大或缩小这些图形——我的大多数图形都在 ggplot2 或基本图形包中.

理想的过程如下:

  • 我绘制了两个图表,如果我在我正在进行数据分析的模块中调整它们的大小,它们会调整大小。
  • 当我完成某个流程后,我将能够将图表保存到某个外部变量中。
  • 稍后,当我查看图表时,我可以调整它们的大小和质量。
  • 最后,当我满意时,我应该能够下载所有这些(但我确信这已经是可能的——这不是问题的一部分)。

编辑:现在代码中的情节如下所示:

observeEvent(input$outlier_zmedian.graph_density, {
  env <- module_env$outlier_zmedian

  if(!is.null(env$rval$outlier_rw)) {
    withProgress(message='Graphing smooth density plot...', {
      env$rval$density <-
        ggplot(env$ggdat) + geom_density(aes(color=sample, x = value)) +
        xlab("Counts") + ylab("Density") +
        ggtitle("Density Plot of Retained Data")

    })
  } else {
    env$rval$density <- NULL
  }
})

然后,使用 output$density_plot 回调中的另一个 print() 语句将 env$rval$density 变量打印到屏幕上。

我想知道如何最大限度地减少更改此代码和系统并使其用户可以简单地下载图表或,将图表保存到程序的另一部分,以后可以访问以更改图形属性,例如大小、质量等。

【问题讨论】:

  • 您不是在寻找png()、pdf() 或jpeg() 之类的东西吗?
  • @PauloMiraMor 我正在寻找一种方法将图形保存为对象本身,然后在我不喜欢它们的分辨率时调整它们的大小,然后将它们保存到文件中。问题不在于找到格式,而是如何存储图形,因为它们只是“通过”R 并显示在您的屏幕上,有点像 RStudio 如何“捕获”图形输出并允许您稍后调整大小。跨度>
  • 那么,这些函数提供了这些功能,不是吗?至少这是我从你的问题中可以理解的。尝试查看它的文档:?png.
  • @PauloMiraMor 不,我不是在问如何绘制图表。我在问如何“捕获”图形或绘制它们的图形设备,或者如何从某种全局变量等访问这些设备。 关键是要捕获图表的设备/可缩放形式,这样我以后可以重新缩放它们并将它们输出为我想要的格式。

标签: r graphics plot ggplot2 shiny


【解决方案1】:

你有几个选择。

1) 使用ggvis 包中的图表

如果您在server.r 和ggvisOutput 中使用bind_shiny 函数,在ui.r 中,您的图表右上角将有一个小齿轮,可以让您将绘图下载为SVG或PNG格式。

2) 使用来自shiny 包的plotPNG

这个函数只是创建一个 png 文件。

3) 使用 downlaodButton 和 downloadHandler from shiny pacakge

这适用于任何类型的情节和多种格式。在ui.r 有这样的东西:

downloadButton(outputId="MYyraphDownload", label="Save Graph (.jpg)")

在server.r 中这样做:

output$densGraphDownload<-downloadHandler(
  filename=function(){paste(GraphName(), ".jpeg", sep="")}, 
  content=function (file){
    jpeg(file,width=15,height=6,units="in",res=300, quality=100)
    print(MyPlot())
    dev.off()
  }
)

此示例假定GraphName() 是一个reactive,其中包含应该是您正在制作的文件名的文本,MyPlot() 是一个reactive,其中包含要保存的实际绘图。此示例生成一个 .jpeg,但您可以将其更改为 R 可以处理的任何其他内容。

【讨论】:

  • 您建议我如何调整图表大小和管理图表?
  • 我认为如果你使用矢量格式,例如 .svg,你可以在任何可以读取文件的软件中调整大小等,它应该看起来不错。您还可以硬编码或响应式更改文件制作函数的参数,例如宽度、高度等。
  • 图形空间的限制更多地由屏幕决定,但它们更有可能被嵌入到更大的东西中,比如用于演示的 PowerPoint 等。 SVG 应该不错,如果我能掌握它...
  • 那么这是否回答了这个问题?如果没有代码,很难更具体地说明要做什么。
猜你喜欢
  • 2011-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多