facet_wrap
我在文档中有类似于此示例的数据:
(来源:ggplot2.org)
我想使用所有数据用整体视图填充最后一个方面。
有没有一种简单的方法可以添加“总”方面facet_wrap
?添加边距很容易facet_grid
,但该选项在facet_wrap
.
注意:facet_grid
如果您想要上图中的象限,则不能使用 using ,ncol
这nrow
需要facet_wrap
.
facet_wrap
我在文档中有类似于此示例的数据:
(来源:ggplot2.org)
我想使用所有数据用整体视图填充最后一个方面。
有没有一种简单的方法可以添加“总”方面facet_wrap
?添加边距很容易facet_grid
,但该选项在facet_wrap
.
注意:facet_grid
如果您想要上图中的象限,则不能使用 using ,ncol
这nrow
需要facet_wrap
.
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)
我更喜欢稍微替代的方法。本质上,在创建绘图之前复制数据,并为所有数据添加一组新数据。我编写了以下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)
}
将新列添加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")
您可以在 facet_wrap 中尝试“margins”选项,如下所示:
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") +
facet_wrap(~ cyl, margins=TRUE)