1. ホーム
  2. r

[解決済み] ggplot2のファセットに一般的なラベルを追加するには?

2023-03-22 12:52:34

質問

ファセットで数値を表示することがよくあります。 これらのファセット値を解釈するのに十分な情報を、軸のタイトルと同様に、補足的なタイトルで提供したいと思います。 ラベラー オプションは不必要なテキストを繰り返し、長い変数のタイトルには使用できません。

何か提案はありますか。

デフォルトのままです。

test<-data.frame(x=1:20, y=21:40, facet.a=rep(c(1,2),10), facet.b=rep(c(1,2), each=20))
qplot(data=test, x=x, y=y, facets=facet.b~facet.a)

<イグ

私が好きなもの

ggplotでできる精一杯のこと。

qplot(data=test, x=x, y=y)+facet_grid(facet.b~facet.a, labeller=label_both)

<イグ

に似ていると@Hendyさんが指摘されています。 ggplot2 のプロットに第二の y 軸を追加する - 完全なものにする

どのように解決するのですか?

最新の ggplot2gtable を内部で使っているため、図の修正が非常に簡単です。

library(ggplot2)
test <- data.frame(x=1:20, y=21:40, 
                   facet.a=rep(c(1,2),10), 
                   facet.b=rep(c(1,2), each=20))
p <- qplot(data=test, x=x, y=y, facets=facet.b~facet.a)

# get gtable object
z <- ggplotGrob(p)

library(grid)
library(gtable)
# add label for right strip
z <- gtable_add_cols(z, unit(z$widths[[7]], 'cm'), 7)
z <- gtable_add_grob(z, 
                     list(rectGrob(gp = gpar(col = NA, fill = gray(0.5))),
                          textGrob("Variable 1", rot = -90, gp = gpar(col = gray(1)))),
                     4, 8, 6, name = paste(runif(2)))

# add label for top strip
z <- gtable_add_rows(z, unit(z$heights[[3]], 'cm'), 2)
z <- gtable_add_grob(z, 
                     list(rectGrob(gp = gpar(col = NA, fill = gray(0.5))),
                          textGrob("Variable 2", gp = gpar(col = gray(1)))),
                     3, 4, 3, 6, name = paste(runif(2)))

# add margins
z <- gtable_add_cols(z, unit(1/8, "line"), 7)
z <- gtable_add_rows(z, unit(1/8, "line"), 3)

# draw it
grid.newpage()
grid.draw(z)

<イグ

もちろん、ストリップラベルを自動的に追加するような関数を書くこともできます。将来のバージョンでは ggplot2 の将来のバージョンにはこの機能があるかもしれませんが、確かではありません。