【问题标题】:Remove facet_wrap labels completely完全删除 facet_wrap 标签
【发布时间】:2012-05-11 07:49:49
【问题描述】:

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

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”效果?

【问题讨论】:

    标签: r graphics ggplot2


    【解决方案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


    使用 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 吗?
    • 在第一个示例中,您可以概括并用 strip.text 替换 strip.text.x,以防您的分面标签沿 y 轴。
    【解决方案2】:

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

      Sandy 的更新答案似乎不错,但可能已因 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 在他的书中推荐的视口布局来堆叠绘图,那么差异就会变得明显。

        【讨论】:

        • 你能举个例子详细说明一下吗?
        • 我们开始吧——试试link。我使用 ggplot 的 'diamonds' 数据集,所以它应该适用于任何人。请注意,分面图的右边距比非分面图略窄。
        • 这不是一个很好的比较,因为它从 facet_wrap 切换到 facet_grid (侧面有面板测试)(面板在顶部,在 OP 的问题中)。关键问题是面板文本是不可压缩的:如果您在 OP 的问题中调整 qplot 的窗口大小,您可以很容易地看到面板文本可能导致的问题。由于 x 轴通常具有先前已知的值,而 y 轴通常具有先前未知的值,这尤其令人遗憾。
        猜你喜欢
        • 2016-04-09
        • 2011-08-27
        • 1970-01-01
        • 2018-07-05
        • 1970-01-01
        • 2020-02-11
        • 2014-09-25
        • 2019-12-20
        • 1970-01-01
        相关资源
        最近更新 更多