如何指定facet_grid中的列或如何更改facet_wrap中的标签

我有大量的数据系列,我想绘制使用小倍数。 ggplot2和facet_wrap组合是我想要的,通常产生一个很好的小块6×6方面。 这是一个更简单的版本:

facet_wrap

问题是,我没有足够的控制面标签中的标签。 数据框中列的名称很短,我想保持这种方式,但我希望facet中的标签更具描述性。 我可以使用facet_grid这样我就可以利用facet_grid函数,但是似乎没有直接的方法来指定列的数量,并且一长串facet不能用于这个特定的任务。 我错过了什么明显的?

facet_grid

问:如何在不更改列名的情况下使用facet_wrap更改构面标签? 或者,如何在使用facet_grid时指定列数和行数?

下面是一个简化例子的代码。 在现实生活中,我正在处理多个组,每个组包含数十个数据序列,每个数据序列都经常变化,所以任何解决scheme都必须自动化,而不是依靠手动赋值。

 require(ggplot2) require(reshape) # Random data with short column names set.seed(123) myrows <- 30 mydf <- data.frame(date = seq(as.Date('2012-01-01'), by = "day", length.out = myrows), aa = runif(myrows, min=1, max=2), bb = runif(myrows, min=1, max=2), cc = runif(myrows, min=1, max=2), dd = runif(myrows, min=1, max=2), ee = runif(myrows, min=1, max=2), ff = runif(myrows, min=1, max=2)) # Plot using facet wrap - we want to specify the columns # and the rows and this works just fine, we have a little block # of 2 columns and 3 rows mydf <- melt(mydf, id = c('date')) p1 <- ggplot(mydf, aes(y = value, x = date, group = variable)) + geom_line() + facet_wrap( ~ variable, ncol = 2) print (p1) # Problem: we want more descriptive labels without changing column names. # We can change the labels, but doing so requires us to # switch from facet_wrap to facet_grid # However, in facet_grid we can't specify the columns and rows... mf_labeller <- function(var, value){ # lifted bodily from the R Cookbook value <- as.character(value) if (var=="variable") { value[value=="aa"] <- "A long label" value[value=="bb"] <- "B Partners" value[value=="cc"] <- "CC Inc." value[value=="dd"] <- "DD Company" value[value=="ee"] <- "Eeeeeek!" value[value=="ff"] <- "Final" } return(value) } p2 <- ggplot(mydf, aes(y = value, x = date, group = variable)) + geom_line() + facet_grid( ~ variable, labeller = mf_labeller) print (p2) 

我不太明白。 您已经编写了一个函数,将您的短标签转换为长描述性标签。 简单地添加一个新列并在该列上使用facet_wrap出现什么问题?

 mydf <- melt(mydf, id = c('date')) mydf$variableLab <- mf_labeller('variable',mydf$variable) p1 <- ggplot(mydf, aes(y = value, x = date, group = variable)) + geom_line() + facet_wrap( ~ variableLab, ncol = 2) print (p1) 

要更改标签名称,只需更改您在facet_wrap使用的因子的因子级别。 这些将在facet_wrap使用。 您可以使用与在facet_grid使用labellerfunction相似的设置。 只要做一些事情:

 new_labels = sapply(levels(df$factor_variable), custom_labeller_function) df$factor_variable = factor(df$factor_variable, levels = new_labels) 

现在可以在facet_wrap使用facet_wrap