【问题标题】:Independent strip themes for ggplot2 facet_wrap using more than one variable使用多个变量的 ggplot2 facet_wrap 的独立条形主题
【发布时间】:2017-01-03 08:11:42
【问题描述】:

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

以这段代码为例:

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

我希望上条('cyl')具有不同的主题 - 比如说,粗体。此外,我可能想让“drv”斜体并使用不同的字体类型和大小。我怎么能这样做?

我在想一些事情:

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

很遗憾,我在文档或以前的问题中找不到类似的内容。

干杯

编辑:我把这个问题写得更笼统一些,以便对社区有进一步的帮助。

【问题讨论】:

标签: r ggplot2 facet-wrap


【解决方案1】:

表面上你应该能够基于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))

【讨论】:

  • 这绝对是一种出路,谢谢。但是,我坚持使用“cyl”的label_both 参数来锚定prefix = "cyl: " 调用。不受约束地使用这个函数也会很有趣(例如,用label_value代替)。
  • 我同意最好不要将标签器硬编码到您的特定变量中(尽管您不必使用"cyl: ",而是使用您的变量名称)。我不太理解你的第二句话,因为我写的函数专门用于label_parsed,以便使用bold
  • 是的,我的意思是 "cyl: " 仅作为示例(在我的例子中是 "method: ")。抱歉,如果我不清楚第二句话。我的意思是,这个解决方案只有在我们明确地将变量的名称放在函数中时才有效(并且它被包含在条带本身中) - 如果我不想要“cyl”,它会很好地工作: 4"、"cyl: 5"、"cyl 6"、"cyl: 8" 在条形文本中,只有 "4"、"5"、"6" 和 "8"。
  • 创建一个不带prefix 参数的标签函数,以对值进行粗体标签。主要区别在于x = paste0(...) 将更改为x = as.character(string)
猜你喜欢
  • 2020-03-25
  • 2015-10-24
  • 2021-07-26
  • 1970-01-01
  • 2021-02-24
  • 2023-01-26
  • 2016-10-04
  • 2019-11-06
  • 2013-10-26
相关资源
最近更新 更多