完全移除facet_wrap标签


84

我想完全删除刻面的标签,以创建一种迷你图效果,对于观众来说,这些标签无关紧要,我能想到的最好的方法是:

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以便为“火花线”留出更多空间吗?

或者,对于像这样的大量二进制值时间序列,是否有更好的方法来获得这种“迷你图”效果?

Answers:


132

对于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布局的替代方法

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

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


7

桑迪的更新答案似乎不错,但可能由于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。


4

据我所知,桑迪的答案是正确的,但我认为值得一提的是,没有小平面的图的宽度与除去小平面的图的宽度似乎有很小的差异。

除非您正在寻找,否则它并不明显,但是,如果您使用Wickham在他的书中建议的视口布局来堆叠图,则差异将显而易见。


1
您可以举例说明一下吗?
mnel 2012年

我们开始-尝试链接。我使用ggplot的“钻石”数据集,因此它适用于任何人。请注意,多面图的右边缘比未多面图略窄。
迪伦

这不是一个很好的比较,因为它从facet_wrap(在OP的问题中,面板在顶部)切换到facet_grid(侧面是面板测试)。关键问题是面板文本不可压缩:如果在OP的问题中调整qplot的窗口大小,则可以轻松地看到面板文本可能导致的问题。由于x轴通常具有先前已知的值,而y轴通常具有先前未知的值,所以这特别不幸。
MattBagg
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.