【问题标题】:ggplot2: Put multi-variable facet_wrap labels on one lineggplot2:将多变量 facet_wrap 标签放在一行上
【发布时间】:2016-09-05 19:19:59
【问题描述】:

我正在使用 facet_wrap 将散点图拆分为

facet_wrap(x~y+z)

在我的情况下,这会根据需要生成 22 个图。但是,这 22 个绘图中的每一个的标签都显示在 3 行(x、y 和 z)中,这不必要地占用了窗口中的空间并将绘图压缩到一个小区域中。我宁愿希望我的地块更大。由于变量 y 和 z 很短,我想将它们显示在同一行而不是两行。

我查看了贴标机选项,但似乎没有一个能达到我想要的效果。如果有任何建议,我将不胜感激。

【问题讨论】:

    标签: r ggplot2 facet facet-wrap


    【解决方案1】:

    这种情况你也可以考虑label_wrap_gen()

    p <- ggplot(mtcars, aes(wt,mpg)) + geom_point() 
    p + facet_wrap(cyl~am+vs, labeller = label_wrap_gen(multi_line=FALSE))
    

    有关更多详细信息,另请参阅 herehere

    【讨论】:

      【解决方案2】:

      我不知道如何使用 labeller 函数执行此操作,但另一种选择是创建一个分组变量,将所有三个分类变量组合成一个可用于分面的变量。这是一个使用内置mtcars 数据框和dplyr 包动态创建新分组变量的示例。紧随其后的是一个允许动态选择一到三个刻面变量的函数的更新。

      library(dplyr)
      
      ggplot(mtcars %>% mutate(group = paste(cyl,am,vs, sep="-")), 
             aes(wt,mpg)) +
        geom_point() +
        facet_wrap(~group)
      

      更新:关于灵活性的评论,下面的代码是一个函数,允许用户输入所需的数据框和变量名称,包括动态选择一个、两个或三个方面列。

      library(dplyr)
      library(lazyeval)
      
      mygg = function(dat, v1, v2, f1, f2=NA, f3=NA) {
      
        dat = dat %>% 
          mutate_(group = 
                    if (is.na(f2)) {
                      f1
                    } else if (is.na(f3)) {
                      interp(~paste(f1,f2, sep='-'), f1=as.name(f1), f2=as.name(f2))
                    } else {
                      interp(~paste(f1,f2,f3,sep='-'), f1=as.name(f1), f2=as.name(f2), f3=as.name(f3))
                    })
      
        ggplot(dat, aes_string(v1,v2)) +
          geom_point() +
          facet_wrap(~group)
      }
      

      现在让我们试试这个功能:

      library(vcd) # For Arthitis data frame
      
      mygg(Arthritis, "ID","Age","Sex","Treatment","Improved")
      mygg(mtcars, "wt","mpg","cyl","am")
      mygg(iris, "Petal.Width","Petal.Length","Species")
      

      【讨论】:

      • 谢谢,这确实有效。但是,我想知道是否有办法使用 ggplot2 参数来做到这一点。我可能想使用不同的变量 facet_wrap 我的图,并且还想避免我的数据表中已经很大的冗余。
      • 查看更新的答案。另请注意,代码不会向数据框对象添加任何列。额外的列仅在 ggplot 函数中添加,不会改变数据框对象本身。
      猜你喜欢
      • 2020-09-14
      • 2015-10-24
      • 2018-11-14
      • 2010-12-04
      • 2012-10-10
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多