我不确定这是不是一个真正的错误,或者我错过了什么,但在这里它.我有一个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}
Run Code Online (Sandbox Code Playgroud)
我认为你问了很多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,] )
}
@
Run Code Online (Sandbox Code Playgroud)