ggplot:facet_grid但使用一个因子级别作为参考

时间:2016-04-29 23:17:47

标签: r plot ggplot2

我想知道如何使用单因素水平作为参考来绘制其他因素。例如,我有以下内容:

set.seed(4)
x <- factor(c('A','B','A','B','A','B','A','B'))
z <- factor(c('a','a','b','b','c','c','d','d'))
y <- runif(8)
df <- data.frame(x,y,z)
p <- ggplot(df, aes(x=x, y=y, fill=z)) + 
       geom_bar(stat = 'identity', position='dodge')

r_plot

然而,与上面的情节不同,我想添加一个方面维度:

p+facet_grid(.~z)

但与上述代码不同,只显示c(&#39; a&#39;&#39;&#39;&#39; c&#39;)级别的方面并绘制每个这些反对&#39; d&#39;作为位置参考=&#39;闪避&#39;。

1 个答案:

答案 0 :(得分:1)

如果允许,您可以在显示结果之前对数据进行一些转换。这可能很麻烦,但您可以添加一个额外的变量来区分变量z c("a", "b", "c")"d"。然后根据附加变量放置颜色和位置,同时将原始z变量转换为 facet变量。通过这种方式,您可以从确定颜色和位置的变量中分离确定构面的变量。

library(dplyr)
library(tidyr)
df1 <- df %>% mutate(m = ifelse(z == "d", "d", "abc")) %>% 
       mutate(z = ifelse(z == "d", "a,b,c", as.character(z))) %>% 
       mutate(z = strsplit(z, ",")) %>% unnest(z)
p <- ggplot(df1, aes(x=x, y=y, fill=m)) + 
     geom_bar(stat = 'identity', position='dodge') + facet_grid(. ~ z)

enter image description here