facet_wrapラベルを完全に削除します


85

ファセットのラベルを完全に削除して、一種のスパークライン効果を作成したいと思います。オーディエンスに関しては、ラベルは無関係です。私が思いつくことができる最善の方法は次のとおりです。

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))

では、(現在は空白の)strip.backgroundを完全に削除して、「スパークライン」用のスペースを増やすことはできますか?

または、このような多数のバイナリ値の時系列に対してこの「スパークライン」効果を取得するためのより良い方法はありますか?

回答:


134

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ます。

パネルタイトルのないggplot2図


ggplotgrobレイアウトを使用する代替

古いバージョン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)

他の誰かが取得していError in apply(strip_mat, 1, max_height) : dim(X) must have a positive lengthますか?
PatrickT 2017年

25

ggplot2バージョン1を使用していますが、必要なコマンドが変更されています。の代わりに

ggplot() ... + 
opts(strip.background = theme_blank(), strip.text.x = theme_blank())

あなたは今使用します

ggplot() ... + 
theme(strip.background = element_blank(), strip.text = element_blank())

詳細については、http://docs.ggplot2.org/current/theme.htmlを参照してください。


8

Sandyの更新された回答は良さそうですが、ggplotの更新によって廃止された可能性がありますか?私が言えることから、次のコード(Sandyの元の回答の簡略版)は、余分なスペースなしでSeanの元のグラフを再現します。

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

ggplot2.0.0を使用しています。


4

私の知る限り、サンディの答えは正しいですが、ファセットのないプロットの幅とファセットが削除されたプロットの幅にはわずかな違いがあるように思われることは言及する価値があると思います。

あなたがそれを探していない限りそれは明らかではありませんが、ウィッカムが彼の本で推奨しているビューポートレイアウトを使用してプロットを積み重ねると、違いが明らかになります。


1
例を挙げてこれについて詳しく説明していただけますか?
mnel 2012年

ここに行きます-リンクを試してください。私はggplotの「diamonds」データセットを使用しているので、誰でも機能するはずです。ファセットグラフの右マージンは、ファセットされていないグラフよりもわずかに狭いことに注意してください。
CWディロン

これは、facet_wrap(OPの質問では、パネルが上にある)からfacet_grid(パネルテストが横にある)に切り替わるため、適切な比較ではありません。重要な問題は、パネルテキストが圧縮できないことです。OPの質問でqplotのウィンドウのサイズを変更すると、パネルテキストが引き起こす可能性のある問題を簡単に確認できます。x軸には以前から既知の値が含まれていることが多く、y軸には以前から未知の値が含まれていることが多いため、これは特に残念です。
MattBagg 2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.