1. ホーム
  2. r

[解決済み] facet_wrapのラベルを完全に削除する

2023-01-19 11:49:57

質問

ファセットのラベルを完全に削除して、ある種の スパークライン のような効果を出したいのですが、視聴者にとってはラベルは関係ないので、私が思いつくのはこれが一番です。

library(MASS)
library(ggplot2)
qplot(week,y,data=bacteria,group=ID, geom=c('point','line'), xlab='', ylab='') + 
     facet_wrap(~ID) + 
     theme(strip.text.x = element_text(size=0))

では、quot;sparklines"のためのスペースを確保するために、(今は空白の)strip.backgroundを完全に取り除くことは可能でしょうか?

あるいは、この".Sparklines"を取得するためのより良い方法はありますか? スパークライン というような効果を得ることができますか?

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

ggplot v2.1.0以降では、以下のようにします。 element_blank() を使って不要な要素を削除してください。

library(MASS) # To get the data
library(ggplot2)

qplot(
  week,
  y,
  data = bacteria,
  group = ID,
  geom = c('point', 'line'),
  xlab = '',
  ylab = ''
) + 
facet_wrap(~ ID) + 
theme(
  strip.background = element_blank(),
  strip.text.x = element_blank()
)

この場合、削除しようとしている要素は strip .


ggplot grobレイアウトを使った代替案

古いバージョンでは ggplot (v2.1.0 以前) では、ストリップテキストは gtable レイアウトの行を占有しています。

element_blank は、テキストと背景を削除しますが、行が占有していたスペースは削除されません。

このコードはレイアウトからそれらの行を削除します。

library(ggplot2)
library(grid)

p <- qplot(
  week,
  y,
  data = bacteria,
  group = ID,
  geom = c('point', 'line'),
  xlab = '',
  ylab = ''
) + 
facet_wrap(~ ID)

# Get the ggplot grob
gt <- ggplotGrob(p)

# Locate the tops of the plot panels
panels <- grep("panel", gt$layout$name)
top <- unique(gt$layout$t[panels])

# Remove the rows immediately above the plot panel
gt = gt[-(top-1), ]

# Draw it
grid.newpage()
grid.draw(gt)