web-dev-qa-db-ja.com

Rのプロットエリア外に脚注引用を追加しますか?

Rで作成した3パネルファセットグリッドプロットに脚注の引用を追加したいと思います。これは、データソースにクレジットを付ける脚注です。理想的には、それを下にして3つの軸すべての外部に、できれば左下に配置したいと思います。

私は_ggplot2_とggsave()も使用しています。これは、grid.text()ベースのソリューションを使用できないことを意味します。これは、x11()ウィンドウにのみ描画され、ggplotオブジェクトに追加できないためです。

ggsaveのサイズ変更パラメーターが必要なため、代わりにpng() ...code... dev.off()を使用することはオプションのように見えません。画面に)。

これが私の基本的なコードです:

_p1 <- ggplot(data, aes(date, value))
    facet_grid(variable ~ .) + geom_point(aes(y =value), size=1) + 
    theme_bw() +
        opts(title=mytitle)
print(p1)
ggsave("FILE.png",width=mywidth, height=myheight, p1, dpi=90)
_

私はもう試した:

_p1 <- ggplot(data, aes(date, value))
    facet_grid(variable ~ .) + geom_point(aes(y =value), size=1) + 
    theme_bw() +
        opts(title=mytitle)
print(p1)
grid.text(unit(0.1,"npc"),0.025,label = "Data courtesy of Me")
grid.gedit("GRID.text", gp=gpar(fontsize=7))
ggsave("FILE.png",width=mywidth, height=myheight, p1, dpi=90)
_

これにより、脚注がx11()ディスプレイの左下隅のプロットの外部に適切に配置されますが、残念ながら、p1オブジェクトには適用されないため、ggsaveコマンドでは保存されません。

私も試しました:

_p1 <- ggplot(data, aes(date, value))
    facet_grid(variable ~ .) + geom_point(aes(y =value), size=1) + 
    theme_bw() +
    opts(title=mytitle) +
annotate("text", label = "Footnote", x = 0, y = 10, size = 5, colour = "black") +
print(p1)
ggsave("FILE.png",width=mywidth, height=myheight, p1, dpi=90)
_

これはggsaveを使用して正常に印刷しますが、次の問題があります。

  • これは、1回ではなく、3つのファセットのそれぞれで3回繰り返されます。
  • これは、プロットの外部ではなく、プロット内に含まれています。
  • テキストの配置が難しい---プロット単位を使用しているようです(私のx軸は日付なので、0を指定すると1970年頃になります)。
  • サイズパラメータを指定しても、テキストサイズが変更されないようです。

私がこれを調べたときからのいくつかの関連リンク...

30
Mittenchops
library(gridExtra)
library(grid)
library(ggplot2)

g <- grid.arrange(qplot(1:10, 1:10, colour=1:10) + labs(caption="ggplot2 caption"), 
              bottom = textGrob("grid caption", x = 1, 
                                hjust = 1, gp = gpar(fontface = 3L, fontsize = 9)))
ggsave("plot.pdf", g)

enter image description here

編集:このソリューションは、ggplot2に追加された最近のキャプション引数をいくらか補完するものであることに注意してください。これは、textGrobが、プロットパネルだけでなく、Figure全体に対して配置できるためです。

32
baptiste

ggplot2は、追加のパッケージを必要とせずに、この機能をネイティブで備えています。 ... + labs(caption = "footnote", ...)

library(ggplot2) 
ggplot(diamonds, aes(carat, price, color = clarity)) + 
  geom_point() + 
  labs(title = "Diamonds are forever...", 
       subtitle = "Carat weight by Price", 
       caption = "H. Wickham. ggplot2: Elegant Graphics for Data Analysis Springer-Verlag New York, 2009.")

enter image description here

37

ブランドンベルテルセンの回答に追加:左隅にキャプションを付けたい場合は、

theme(plot.caption = element_text(hjust = 0))
5
MartineJ