Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
knitr:在循环中调用ggplot2函数不会';t在带有某些其他打印功能时进行打印_R_Ggplot2_Knitr - Fatal编程技术网

knitr:在循环中调用ggplot2函数不会';t在带有某些其他打印功能时进行打印

knitr:在循环中调用ggplot2函数不会';t在带有某些其他打印功能时进行打印,r,ggplot2,knitr,R,Ggplot2,Knitr,我不确定这是否是一个真正的错误,或者我遗漏了什么,但它来了。 我有一个ggplot函数(plot_data),我想在循环中调用它。我已经将函数包含在它自己的块中。在案例一(标题为“works”的区块)中,调用函数在循环中工作正常,在这种情况下,plot_data函数后面跟着一个barplot。但是,在第二种情况下,plot_data()函数后面紧跟着一个heatmap,但奇怪的是,heatmap会抑制plot_data函数。无论是否围绕plot_数据函数调用plot()或print(),都会发生

我不确定这是否是一个真正的错误,或者我遗漏了什么,但它来了。 我有一个ggplot函数(plot_data),我想在循环中调用它。我已经将函数包含在它自己的块中。在案例一(标题为“works”的区块)中,调用函数在循环中工作正常,在这种情况下,plot_data函数后面跟着一个barplot。但是,在第二种情况下,plot_data()函数后面紧跟着一个heatmap,但奇怪的是,heatmap会抑制plot_data函数。无论是否围绕plot_数据函数调用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}
[序言省略]
\开始{document}
=

plot_data我想你从knitr
那里问了很多问题。在R中,对齐基础图形和网格图形不是很容易,也不是很有挑战性。我不知道如何使用(package latex
graphics
)来实现这一点,但我认为当你调用
热图时,它是在网格图的同一位置打印的

在调用基本图形之前添加
绘图。新建
,对我来说效果很好:

<<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,]  )
 }
@
=
种子集(10010)

数据我认为你的函数有错误,熔体的变量被关闭了。这对我很有用:

library(ggplot2)
library(reshape2)
set.seed(10010)
data <- matrix(runif(10000, 1,100), ncol=100)
for (i in 1:3) {
   ind <- sample(1:100, 10)

   d.melt <- melt(data[ind,])
   p<-ggplot(data=d.melt, aes(x=Var1, y=Var2, group=Var1, colour=Var1)) + 
      geom_line(size=.5) +
      scale_x_discrete("") +
      scale_y_continuous("Value")

   print(p)  
   plot.new()
   heatmap(data[ind,]  )
}
库(ggplot2)
图书馆(E2)
种子集(10010)

数据这是一个很长的过程,但是
par(“ask”)
是否正确?每个区块中的
有什么不同(并不是说它改变了问题)?为什么不在
setup
中设置
eval=TRUE
,然后不麻烦调用它呢?sebastian-c:no par(“ask”)的计算结果为false。mnel:我在玩调用块代码的不同方法。按照你建议的惯常方式做同样的效果。我将编辑源代码以反映这一点;可能是一只虫子;欢迎你给我发个短信,我以后会看的