owl*_*owl 2 plot r view save rstudio
我正在尝试创建一个绘图并最终将其保存为文件。但因为我正在进行很多更改并想对其进行测试,所以我希望能够同时查看和保存绘图。我已经查看此页面来执行我想做的事情,但在我的系统中,它似乎没有按预期工作。
\n\n这是我的代码:
\n\npng(\'Save.png\')\n\nsample.df <- data.frame(group = c(\'A\',\'B\',\'A\',\'C\',\'B\',\'A\',\'A\',\'C\',\'B\',\'C\',\'C\',\'C\',\'B\'),\nX = c(2,11,3,4,1,6,3,7,5,9,10,2,8),\nY = c(3,8,5,2,7,9,3,6,6,1,3,4,10))\n\nplot(Y ~ X, data = sample.df)\n\ndev.copy(png, \'Save.png\')\ndev.off()\nRun Code Online (Sandbox Code Playgroud)\n\n有几个问题(我是 R 新手,所以我可能完全遗漏了一些东西):
\n\n(1) 当我使用 png() 时,我无法在 RStudio 中查看绘图,因此我使用 dev.copy() 但它不允许我在 R studio 中查看我的绘图
\n\n(2) 即使在我使用 dev.off() 后,我也无法查看保存的文件,直到我关闭 RStudio(显示“Windows 照片查看器无法打开此图片,因为该图片正在另一个程序中编辑”)。每次都需要重新启动,非常不方便。
\n\n我做错了什么以及如何在不每次重新启动 RStudio 的情况下查看和查看保存的文件?先感谢您!
\n\n添加
\n\n根据 Love T\xc3\xa4tting\ 的评论,当我运行 dev.list() 时,这就是我得到的。
\n\n> png(\'Save.png\')\n> \n> sample.df <- data.frame(group = c(\'A\',\'B\',\'A\',\'C\',\'B\',\'A\',\'A\',\'C\',\'B\',\'C\',\'C\',\'C\',\'B\'),\n+ X = c(2,11,3,4,1,6,3,7,5,9,10,2,8),\n+ Y = c(3,8,5,2,7,9,3,6,6,1,3,4,10))\n> \n> plot(Y ~ X, data = sample.df)\n> \n> dev.copy(png, \'Save.png\')\npng \n 3 \n> dev.off()\npng \n 2 \n> dev.list()\npng \n 2 \n> dev.off()\nnull device \n 1 \n> dev.list()\nNULL\nRun Code Online (Sandbox Code Playgroud)\n\n为什么我没有获得 RStudioGD?
\nRStudio 有自己的设备“RStudioGD”。您可以使用 来查看它dev.list(),默认情况下它是第一个也是唯一一个。
R的解耦渲染和后端的设计是通过设备的抽象。您可以使用哪些取决于平台和环境。dev.list()显示当前设备的堆栈。
如果我正确理解你的问题,你想首先在 RStudio 中显示图形,然后决定是否要保存它。根据保存图像的频率,您可以使用 RStudio 绘图窗格中的“导出”按钮并手动保存。
否则,你选择尝试复制它对我来说也是显而易见的。
据我所知,R 中的设备抽象不允许将设备封装为对象,因此可以将其作为执行实际绘图的函数的参数。由于dev.set()采用索引作为参数,因此将索引作为参数传递将取决于设备堆栈的状态。
我自己还没有想出一个干净的解决方案,有时会反驳说,将绘图渲染代码与对某个设备的调用括起来,然后立即保存,然后根据全局切换设备。
因此,如果可以的话,请使用 RStudios 导出功能,否则抽象需要维护全局设备堆栈的状态,并对其状态进行广泛的测试,因为它是全局的,并且您无法将绘图调用定向到某个设备,它只是绘制到当前设备(据我所知)。
OP评论后编辑
dev.off如果您在 后无法观看文件,但还需要退出 RStudio,那么您遇到的行为似乎有所不同。对于某些类型的绘图框架,需要在图形对象上调用 print 才能将其实际打印到文件中。也许这是由 RStudio 在关闭时完成的,作为打开设备的正常拆卸过程的一部分?在这种情况下,如果您在退出 RStudio 之前强制查看其内容,则该文件应该为空。有时有效的另一件事是拨打dev.off两次电话。我不知道具体原因,但有时创建的设备比我预期的要多。完成后dev.off,会显示什么dev.list?
OP编辑后编辑
我看得出你是这么做的png(); dev.copy(); dev.off()。这将使您打开的设备比关闭的设备多一台。您仍然拥有您开始打开的第一个图形设备,正如您在列表中看到的那样。您可以简单地删除dev.copy(). 图像将保存在文件系统上dev.off()并且应该能够从文件系统中打开。
至于为什么看不到RStudio图形设备,我不完全确定。可能是其他代码扰乱了您的设备堆栈。我会检查一个干净的会话是否存在,以确保其他代码不会篡改设备堆栈。从 RStudio 论坛和其他 SO 问题来看,RStudio 中似乎存在与绘图窗格相关的问题,这些问题在将 RStudio 更新到最新版本后已得到解决。如果这对你来说是一个可行的解决方案,我会尝试一下。
| 归档时间: |
|
| 查看次数: |
2088 次 |
| 最近记录: |