ggplot2 facet_wrap的独立条带主题,使用多个变量

时间:2016-08-26 15:38:02

标签: r ggplot2 facet-wrap

是否可以为ggplot2 facet_wrap中使用的每个变量设置独立的条带主题?

以这段代码为例:

p1 <- ggplot(mpg, aes(displ, hwy)) +
   geom_point() +
   facet_wrap(c("cyl", "drv"), labeller = "label_both")
plot(p1)

Plot output

我希望上面的条带(&#39; cyl&#39;)具有不同的主题 - 比如粗体。另外,我可能想要制作&#39; drv&#39;斜体和不同的字体类型和大小。我怎么能这样做?

我正在考虑以下几点:

 p1 <- p1 + theme(strip.text.variable1 = element_text(face = 'bold'),
                  strip.text.variable2 = element_text(face = 'italic', size = 8)
                  )

不幸的是,我无法在文档或之前的问题中找到类似的内容。

干杯

编辑:我提出的问题更为笼统,可以为社区提供进一步的帮助。

1 个答案:

答案 0 :(得分:3)

表面上你应该能够基于label_both创建一个新功能来返回粗体标签,但到目前为止,我的尝试已经以可怕的Error in variable[[i]] : subscript out of bounds结束了。

另一种方法是构建一个函数来制作你想要的标签。这很像this answer。在此函数中,您可以为变量的值添加前缀并使其变为粗体。

make_labels = function(string, prefix = "cyl: ") {
    x = paste0(prefix, as.character(string))
    do.call(expression, lapply(x, function(y) bquote(bold(.(y)))))
}

现在在as_labeller中使用此函数作为facet_wrap中的“cyl”变量。您希望将as_labeller中的默认标签符更改为label_parsed,以便正确解析表达式。将label_both用于其他变量。

ggplot(mpg, aes(displ, hwy)) +
    geom_point() +
    facet_wrap(c("cyl", "drv"), 
               labeller = labeller(cyl = as_labeller(make_labels, default = label_parsed), 
                                   drv = label_both))

enter image description here