- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在大型 for 循环期间将多个绘图(使用 ggplot2)保存到列表中。然后随后在网格中显示图像(使用 grid.arrange)
我试过两种解决方法:1 将其存储在列表中,如下所示:
pltlist[["qplot"]] <- qplot
但是由于某种原因,这确实正确地保存了情节。所以我采用了第二种策略,即 recordPlot()这能够正确保存情节,但无法在网格中使用它。
可重现的例子:
require(ggplot2);require(grid);require(gridExtra)
df <- data.frame(x = rnorm(100),y = rnorm(100))
histoplot <- ggplot(df, aes(x=x)) + geom_histogram(aes(y=..density..),binwidth=.1,colour="black", fill="white")
qplot <- qplot(sample = df$y, stat="qq")
pltlist <- list()
pltlist[["qplot"]] <- qplot
pltlist[["histoplot"]] <- histoplot
grid.arrange(pltlist[["qplot"]],pltlist[["histoplot"]], ncol=2)
上面的代码有效但产生了错误的图表在我的实际代码中
然后我尝试了 recordPlot()
print(histoplot)
c1 <- recordPlot()
print(qplot)
c2 <- recordPlot()
我可以单独显示所有的图但是 grid.arrange 产生错误:
grid.arrange(replayPlot(c1),replayPlot(c2), ncol=2) # = Error
gList(list(wrapvp = list(x = 0.5, y = 0.5, width = 1, height = 1, : “gList”中只允许“grobs”
在此线程中 Saving grid.arrange() plot to file他们讨论了一个使用 arrangeGrob() 的解决方案
arrangeGrob(c1, c1, ncol=2) # Error
vapply(x$grobs, as.character, character(1)) 中的错误: 值的长度必须为 1, 但是 FUN(X[[1]]) 结果是长度 3
我被迫使用 recordPlot() 而不是保存到列表中,因为这在保存时不会生成与立即绘制时相同的图形,很遗憾,我无法复制,抱歉。
在我的实际代码中,我正在执行一个大型 for 循环,遍历多个变量,与每个变量建立关联并绘制散点图,其中我根据它们的有效位来命名散点图。然后我想在动态 knitr 报告中重新显示网格中重要的图。
我知道我可以在 for 循环之后重新绘制重要的图而不是保存它们(我也无法在执行 knitr 时另存为 png)。不过,我想找到一种方法将绘图动态保存为 R 对象,然后在网格中重新绘制它们。
感谢阅读
“R 版本 3.2.1”Windows 7 64 位 - RStudio - 版本 0.99.652附加基础包:[1] grid grDevices datasets utils graphics stats methods base
其他附包:[1] gridExtra_2.0.0 ggplot2_1.0.1
最佳答案
我可以想到两种解决方案。
<强>1。如果您的目标只是将绘图列表保存为 R 对象,我建议:
saveRDS(object = pltlist, file = "file_path")
这样,当您希望重新加载这些图表时,您只需使用 readRDS()
。然后,您可以将它们放入 cowplot
或 gridarrange
中。此命令适用于所有列表和 R 对象。
这种方法的一个警告是,如果 ggplot2 的设置/标记取决于环境中的事物(不是数据,而是诸如点大小、形状或颜色的设置之类的东西)而不是用于制作图形的 ggplot2 函数),你的图表将无法工作,直到你恢复你的依赖关系。保存一些依赖项的原因之一是模块化您的脚本以制作图表。
另一个注意事项是性能:根据我的经验,我发现当您有大量图表(100 多个图表)时,读取数据和重新制作单个图表实际上比加载所有图表的 RDS 文件更快.
<强>2。如果您的目标是保存每个图形的“图像”或“图片”(单图和/或多图,如 .png、.jpeg 等),然后在 R 之外手动调整网格中的内容,例如作为 powerpoint 或 photoshop,我建议:
filenames <- c("Filename_1", "Filename_2") #actual file names you want...
lapply(seq_along(pltlist), function(i) {
ggsave(filename = filenames[i], plot = pltlist[[i]], ...) #use your settings here
})
我喜欢的单图设置:
lapply(seq_along(pltlist), function(i) ggsave(
plot = pltlist[[i]],
filename = paste0("plot_", i, "_", ".tiff"), #you can even paste in pltlist[[i]]$labels$title
device = "tiff", width=180, height=180, units="mm", dpi=300, compression = "lzw", #compression for tiff
path = paste0("../Blabla") #must be an existing directory.
))
如果您真的对网格排列有强制症,并且您没有太多要发布的网格,则您可能想要采用手动方法。否则,当您执行 grid.arrange 时,您需要在那里执行所有规范(调整字体、增加轴标签大小、自定义颜色等),然后相应地调整宽度和高度。
关于r - 将多个 ggplot2 图保存为列表中的 R 对象并在网格中重新显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31947727/
您能否建议如何在 Bootstrap 或 IE 兼容的 CSS 网格中,在没有 CSS 网格的情况下进行以下布局。 在大屏幕中 头部,左侧堆叠的 body 和右侧覆盖头部和 body 高度的图像。 [
我想在 Objective-C 中绘制一个 15*15 的网格。格子颜色是蓝色的,就像在诺基亚制作“贪吃蛇”游戏的棋盘一样。 我试过使用 for 循环来创建 subview ,但它似乎不起作用,我查看
我正在尝试将 CSS 网格与 grid-template-columns: repeat(auto-fill, auto) 一起使用,单元格被设置为最大宽度,导致每行一个元素。 p> 是否可以让元素宽
我正在努力在网格的自定义列上添加一个指向网站的简单、简单的链接。我用了 Inchoo blog为列添加自定义渲染器,它可以工作。我认为只需修改渲染并添加标签就足够了。但我的希望破灭了,行不通。 如何做
使用 Gnuplot 我绘制了下图 - 现在,正如您在图像中看到的那样,很难在线条之间识别出其末端的块。所以我想用不同的颜色或样式交替着色网格。 我现在用来给网格着色的代码是 - set style
假设我有一个非常简单的 WPF 网格(6 行 x 6 列),定义如下:
我有一个希望绑定(bind)到 WPF 网格的集合。 我面临的问题是列数是动态的并且取决于集合。这是一个简单的模型: public interface IRows { string Messa
我正在使用 Vaadin 8,我想制作某种混淆矩阵。我想知道是否可以根据单元格位置而不是数据提供者手动填充表格/网格的值。 referenceTable.addColumn(reference ->
我在 http://jsfiddle.net/TsRJy/ 上创建了一个带有 div 框的网格. 问题 我不知道如何使 a:hover 工作。 信息 重写 HTML 代码,因为表格不适合我。 http
银光处女在这里。如何使网格周围的用户控件自动调整大小以适应内部网格宽度?目前,当浏览器窗口更宽时,用户控件的显示尺寸约为 300 或 400 像素。它在数据网格周围呈现垂直和水平滚动条,这很丑陋。我想
这个问题已经有答案了: Equal width columns in CSS Grid (11 个回答) 已关闭 2 年前。 使用 CSS Grid,当您不知道会有多少个子项时,如何将所有子项保留在一
我想使用 CSS Grid 的 grid-template-areas。 但问题是我正在使用的 CMS 添加了大量额外的包装器。有没有办法忽略额外的包装?因为它弄乱了漂亮的网格区域...... 我正在
在我的Grid中,当我单击“操作”按钮(下面的代码中显示的“删除和编辑”按钮)时,我需要弹出一个窗口,而不用警告消息提醒用户; 在下面的代码中,我正在使用HANDLER handler: button
这个问题已经有答案了: Equal width columns in CSS Grid (11 个回答) 已关闭 2 年前。 使用 CSS Grid,当您不知道会有多少个子项时,如何将所有子项保留在一
我需要模拟一个仓库,其中有几辆自动驾驶车辆在给定的布局上移动,并具有简单的优先级规则。根据我的理解,这个问题可以通过离散事件模拟(DES)轻松解决,我会使用 SimPy为了这。 我看到的问题是,我似乎
在 ASP.NET 中,我可以让用户控件在页面上的表格中占据多个单元格: 用户控件1: foo bar 第1页: 并且自动调整列宽以适应最大的用户控件。 这也可以在 WPF
我正在寻找一种方法来实时搜索我的网格+要过滤的复选框。我有一个包含学生的网格(照片和姓名)。我想要的是有一个复选框,可以过滤学生所在的不同类(class)。还有一个搜索栏,我可以在其中输入学生姓名。
我正在使用 jQuery 和 jQuery UI 构建一个 Web 应用程序。我陷入了僵局。我需要的是一个 jQuery 网格,它具有可编辑字段,并以某种方式在这些可编辑单元格之一上合并一个自动完成字
我想知道是否有其他 JavaScript 组件可以提供具有多个分组的网格表示。下面是jqGrid的截图我扩展了允许该功能,但它需要获取所有数据。我希望在扩展分组时加载数据。 另一个修改后的 jqGri
我一直在为我将在此处描述的 CSS 问题而烦恼: 在下面的示例 ( https://codesandbox.io/s/jjq4km89y5 ) 中,您可以看到一个可滚动的内容(紫色背景)和一个被左侧面
我是一名优秀的程序员,十分优秀!