完全删除facet_wrap标签

时间:2012-05-11 07:49:50

标签: r graphics ggplot2

我想完全删除构面的标签以创建一种 sparkline 效果,因为标签无关紧要的观众,我能想到的最好的是:

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以便为“迷你图”留出更多空间吗?

或者有没有更好的方法来获得像这样的大量二进制值时间序列的“ sparkline ”效果?

4 个答案:

答案 0 :(得分:85)

对于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


替代使用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)

答案 1 :(得分:24)

我正在使用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

答案 2 :(得分:4)

尽我所知,桑迪的答案是正确的,但我认为值得一提的是,没有刻面的绘图宽度和删除刻面的绘图宽度似乎有一点差异。

除非你正在寻找它,否则不是很明显,但如果你使用Wickham在他的书中推荐的视口布局来叠加图,那么差异就会变得明显。

答案 3 :(得分:4)

Sandy的更新答案看起来不错,但是,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。