gpt4 book ai didi

r - knitr:在循环中调用 ggplot2 函数在伴随某些其他绘图函数时不会绘图

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

我不确定这是否是一个真正的错误,或者我遗漏了什么,但它就在这里。
我有一个 ggplot 函数 (plot_data),我想在循环中调用它。我已经将该函数包含在它自己的块中。调用该函数在循环中可以正常工作,以防万一(名为“有效”的块),在这种情况下,plot_data 函数后跟一个条形图。然而,在第二种情况下, plot_data() 函数后跟一个热图,但奇怪的是,热图抑制了 plot_data 函数。无论是否在 plot_data 函数周围调用 plot() 或 print() 都会发生这种情况。

有没有办法让 ggplots 与 knitr 一起工作?一个函数调用到底是如何抑制前一个函数调用的输出的?

以下代码为我重现了错误:

[preamble omitted]
\begin{document}

<<setup, eval=TRUE, echo=FALSE, cache=FALSE>>=
plot_data <- function(data) {
require(ggplot2)
require(reshape)
d.melt <- melt(data)
ggplot(data=d.melt, aes(x=X2, y=value, group=X1, colour=X1)) + geom_line(size=.5) +
scale_x_discrete("") +
scale_y_continuous("Value")
}
@

<<works, echo=FALSE, results='asis', out.width='.3\\linewidth', dev='pdf', cache=TRUE >>=
set.seed(10010)
data <- matrix(runif(10000, 1,100), ncol=100)
for (i in 1:10) {
ind <- sample(1:100, 10)
plot(plot_data(data[ind,]))
barplot(ind)
}
@

<<doesnt-work, echo=FALSE, results='asis', out.width='.3\\linewidth', dev='pdf', cache=TRUE >>=
set.seed(10010)
data <- matrix(runif(10000, 1,100), ncol=100)
for (i in 1:10) {
ind <- sample(1:100, 10)
plot(plot_data(data[ind,])) # calling print instead of plot doesn't work either
heatmap(data[ind,] )
}
@

\end{document}

最佳答案

我想你问了很多 knitr .在 R 中对齐基础图形和网格图形不是很容易和具有挑战性。我不知道如何knitr这样做可能使用(包 latex graphics ),但我认为是当你调用 heatmap 时,它打印在网格图的同一位置。

添加 plot.new在调用基本图形之前对我来说很好用:

<<doesnt-work, fig.show='hold',out.width='.3\\linewidth'>>=
set.seed(10010)
data <- matrix(runif(10000, 1,100), ncol=100)
for (i in 1:3) {
ind <- sample(1:100, 10)
print(plot_data(data[ind,])) # calling print instead of plot doesn't work either
plot.new()
heatmap(data[ind,] )
}
@

关于r - knitr:在循环中调用 ggplot2 函数在伴随某些其他绘图函数时不会绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15491160/

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