Вопрос по ggplot2, r – Удалите ярлыки facet_wrap полностью

51

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

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

Так можно ли полностью избавиться от (теперь пустого) полосы strip.background, чтобы освободить место для «спарклайнов»?

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

Ваш Ответ

4   ответа
78

Для 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 figure without panel titles


Alternative using ggplot grob layout

В старых версиях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 ?
4

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

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

Вот и мыlink, Я использую ggplot 's' diamonds 'apos; набор данных, поэтому он должен работать для всех. Обратите внимание, что правая граница грани графа немного уже, чем грани без графа.
Можете ли вы уточнить это на примере?
Хм. Давайте посмотрим ...
Это не очень хорошее сравнение, поскольку оно переключается на facet_grid (с тестом панели сбоку) от facet_wrap (с панелями сверху, в вопросе OP). Ключевая проблема заключается в том, что текст панели не сжимается: если вы измените размер окна qplot в вопросе OP, вы можете легко увидеть проблему, которую может вызвать текст панели. Поскольку ось X часто имеет ранее известные значения, а ось Y часто имеет ранее неизвестные значения, это особенно прискорбно.
22

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

3

Обновленный ответ Сэнди кажется хорошим, но, возможно, он устарел из-за обновлений ggplot? Из того, что я могу сказать, следующий код (упрощенная версия оригинального ответа Сэнди) воспроизводит оригинальный граф Шона без лишних пробелов:

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.

Похожие вопросы