在ggplot2中轻松添加'(all)'facet到facet_wrap?

Fr.*_*Fr. 8 r ggplot2

我的facet_wrap文档中的数据看起来像这个例子:

http://docs.ggplot2.org/current/facet_wrap-29.png

我想使用所有数据填充整个视图的最后一个方面.

是否有一种简单的方法来添加"总"方面facet_wrap?添加边距很容易facet_grid,但该选项不存在facet_wrap.

注意:使用facet_grid,如果你想有一个象限如上面的情节,这就要求不是一个选项ncolnrow参数的facet_wrap.

Rol*_*and 8

library(ggplot2)

p <- qplot(displ, hwy, data = transform(mpg, cyl = as.character(cyl)))
cyl6 <- subset(mpg, cyl == 6)
p + geom_point(data = transform(cyl6, cyl = "7"), colour = "red") +
  geom_point(data = transform(mpg, cyl = "all"), colour = "blue") +
  facet_wrap(~ cyl)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Mic*_*per 7

我更喜欢稍微替代的方法.实际上,在创建绘图之前会复制数据,并为所有数据添加一组新数据.我编写了以下CreateAllFacet函数来简化过程.它返回一个包含重复数据和附加列的新数据框facet.

library(ggplot2)

#' Duplicates data to create additional facet
#' @param df a dataframe
#' @param col the name of facet column
#'  
CreateAllFacet <- function(df, col){
  df$facet <- df[[col]]
  temp <- df
  temp$facet <- "all"
  merged <-rbind(temp, df)

  # ensure the facet value is a factor
  merged[[col]] <- as.factor(merged[[col]])

  return(merged)
}
Run Code Online (Sandbox Code Playgroud)

将新列添加facet到原始数据的好处是它仍然允许变量cylinder用于在美学中为绘图中的点着色:

df <- CreateAllFacet(mpg, "cyl")

ggplot(data=df, aes(x=displ,y=hwy)) +
  geom_point(aes(color=cyl))  +
  facet_wrap(~ facet) +
  theme(legend.position = "none")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述