101

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

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

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

4

4 回答 4

156

对于 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)
于 2012-05-11T08:30:51.327 回答
26

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

于 2014-07-31T11:45:50.350 回答
8

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

于 2016-03-15T14:43:54.543 回答
4

据我所知,桑迪的回答是正确的,但我认为值得一提的是,没有刻面的图的宽度和去除刻面的图的宽度似乎存在细微差别。

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

于 2012-10-22T02:12:38.353 回答