12

ggplot_build によって生成されたデータを変更することにより、ggplot で作成されたグラフを変更しています ( geom_boxplotの塗りつぶしの美学で使用される欠損因子レベルにスペースを含めるのと同様の理由で)。このトピックで見つけたヘルプを理解している限り、結果で ggsave を呼び出す前に ggplot_gtable と ArrangeGrob を適用して結果を保存できるはずです( grid.arrange() プロットをファイルに保存)。

ただし、次の単純な再現可能な例でも、「プロットはggplot2プロットである必要があります」というエラーが表示されます。

require('ggplot2')
require('gridExtra')
df <- data.frame(f1=factor(rbinom(100, 1, 0.45), label=c("m","w")), 
                  f2=factor(rbinom(100, 1, 0.45), label=c("young","old")),
                  boxthis=rnorm(100))
g <- ggplot(aes(y = boxthis, x = f2, fill = f1), data = df) + geom_boxplot()
dd <- ggplot_build(g)

# Printing the graph works:
print(arrangeGrob(ggplot_gtable(dd)))

# Saving the graph doesn't:
ggsave('test.png',arrangeGrob(ggplot_gtable(dd)))

なぜこれがうまくいかないのか誰でも説明できますか? ggplot_build() を使用してデータを変更した後に ggsave を使用する方法はありますか?

(パッケージの私のバージョンは gridExtra_0.9.1 と ggplot2_0.9.3.1 です)

4

2 に答える 2

1

回避策として、gtable オブジェクトを grid.draw() でプロットしてから、dev.copy() を使用してプロットをファイルに転送します。

直後に dev.off() も使用することを忘れないでください。

于 2015-12-07T19:45:31.767 に答える