R: удаление меток facet_wrap полностью в ggplot2

Я хотел бы полностью удалить метки для граней, чтобы создать эффект эффекта искры, поскольку для аудитории эти метки не имеют значения, лучшее, что я могу придумать, это:

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, чтобы позволить больше места для "искровых линий"?

Или, альтернативно, есть лучший способ получить этот эффект "искры" для большого количества двоичных так называемых временных рядов?

Ответ 1

Для 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 фигура без заголовков панели


Альтернатива с использованием ggplot grob layout

В более старых версиях ggplot (до версии 2.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)

Ответ 2

Я использую ggplot2 version 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

Ответ 3

Насколько я могу судить, Сэнди отвечает правильно, но я думаю, что стоит упомянуть, что, похоже, существует небольшая разница в ширине сюжета без граней и ширине сюжета с удаленными гранями.

Это не очевидно, если вы не ищете его, но если вы складываете графики, используя макеты видовых экранов, которые рекомендует Уикхэм в своей книге, разница становится очевидной.

Ответ 4

Песчаный обновленный ответ кажется хорошим, но, возможно, был устаревшим благодаря обновлениям 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())

Я использую ggplot 2.0.0.