gpt4 book ai didi

r - knitr:在 do.call(grid.arrange, list_of_plots) 时禁止立即绘图

转载 作者:行者123 更新时间:2023-12-04 12:21:50 25 4
gpt4 key购买 nike

我有一个双行图,由第一行的图和第二行的图列表组成。

knitr 我做

\documentclass{article}

\begin{document}

<<plots, fig.width='\\textwidth', echo = FALSE, fig.height=5, fig.width = 10, warning = FALSE>>=

require(ggplot2)
plot <- ggplot() + geom_point(data=cars, aes(speed, dist)) + labs(x=NULL, y=NULL)

# create plot with function
makePlot <- function(myLabel) {
ggplot() + geom_point(data=cars, aes(speed, dist)) + labs(x=NULL,y=NULL,title=myLabel)
}
list_plot <- lapply(c("one","two","three"), makePlot)

require(gridExtra)
grob <- do.call(grid.arrange, c(list_plot, nrow=1, ncol=3)) # here R sends the plots to the graphical device!

grid.arrange(plot,
grob,
nrow=3)
@



\end{document}

产生

enter image description here

问题是我 do.call 我的绘图列表,它会立即将绘图发送到图形设备。

knitr 中或通过避免 do.call 在将情节传递给 grob 时吐出情节,是否有解决此问题的方法?

最佳答案

使用 ??grid.arrange 我们找到了 arrangeGrob 的帮助页面。这指定了以下内容:

  • arrangeGrob: return a grob without drawing
  • grid.arrange: draw on the current device
  • marrangeGrob: interface to arrangeGrob that can dispatch on multiple pages

因此,解决方案是使用 arrangeGrob 而不是 grid.arrange

一个额外的好处是可以使用 grobs 参数传递 grobs 列表,因此我们可以取消 do.call 结构。

关于r - knitr:在 do.call(grid.arrange, list_of_plots) 时禁止立即绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35969130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com