web-dev-qa-db-ja.com

関数内でggplotを保存する

グラフィックスデバイスを使用して関数内でggplotを保存しようとしています。しかし、コードが空のグラフを生成することがわかりました。以下は非常に単純な例です。

library(ggplot2)
ff <- function(){
  jpeg("a.jpg")
  qplot(1:20, 1:20)
  dev.off()
}
ff()

関数のコンテンツのみを実行する場合は、すべて問題ありません。 ggsave()を使用すると期待どおりの結果が得られることはわかっていますが、なぜjpeg()とdev.off()が機能しないのか疑問に思っています。私はRの異なるバージョンでこれを試しましたが、問題は解決しません。

35
Wei Wang

jpeg(); print(p); dev.off()シーケンスの代わりにggsaveを使用する必要があります。 ggsaveは、より多くのオプションと多様性を提供することを除いて、関数を使用して意図したとおりに実行するラッパーです。出力のタイプを明示的に指定できます。 jpgまたはpdf、またはファイル名の拡張子から推測します。

したがって、コードは次のようになります。

p <- qplot(1:20, 1:20)
ggsave(filename="a.jpg", plot=p)

見る ?ggsave 詳細については


コードの元の動作が機能しない理由は、確かによく寄せられる質問です( stackoverlflow および CRANに関するR FAQ )。プロットを印刷するには、printステートメントを挿入する必要があります。対話型コンソールでは、印刷はバックグラウンドで静かに実行されます。

44
Andrie

これらのプロットは印刷する必要があります:

ff <- function(){
  jpeg("a.jpg")
  p <- qplot(1:20, 1:20)
  print(p)
  dev.off()
}
ff()

これは非常に よくある 間違いです。

16
joran