2013-03-19 11 views
8

これは真のバグか何かが不足しているかどうかは分かりませんが、ここにはあります。 私はループで呼び出したいggplot関数(plot_data)を持っています。私はそれ自身のチャンクに関数を含めました。この関数を呼び出すことは、ケース1のループ( "works"というチャンク)でうまく機能します。この場合は、plot_data関数の後にbarplotが続きます。しかし、2番目のケースでは、plot_data()関数の後にヒートマップが続きますが、ヒートマップはodd_data関数を抑制します。これは、plot()またはprint()がplot_data関数の周りで呼び出されたかどうかにかかわらず発生します。knitr:ループ内でggplot2関数を呼び出すと、他のプロット関数を伴ってプロットされない

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} 
+0

これは長いショットですが、 'par(" ask ")' TRUEですか? –

+1

各チャンク内の '<> 'とは何ですか(問題を変更するものではありません)。 'setup'で' eval = TRUE'をセットして、それを呼ぶのをやめてみませんか? – mnel

+0

sebastian-c:no par( "ask")はfalseと評価されます。 – zzk

答えて

3

私はあなたがknitrから多くのことを尋ねると思います。 knitrはおそらく(パッケージラテックス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,] ) 
} 
@ 
+0

これは正解です、ありがとう!私はplot.newを忘れていた。 – zzk

0

、溶融物からの変数がオフになっています。これは私のために働いた:

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,] ) 
} 
関連する問題