【问题标题】:use of bquote in ggplot2 custom labeller在 ggplot2 自定义贴标机中使用 bquote
【发布时间】:2021-10-25 18:43:54
【问题描述】:

在某些ggplot2自定义labellers的实例中是否可以正确使用bquote?以下示例不会产生所需的输出(并且不会显示任何警告/错误):

library(ggplot2)
data(Orange)
Orange$tree2 <- paste0("T", Orange$Tree)

tree.lab <- c(
  T1 = bquote("Tree 1"[test]), 
  T2 = "Tree 2", 
  T3 = "Tree 3",  
  T4 = "Tree 4", 
  T5 = "Tree 5"
)

ggplot(Orange, aes(x = age, y = circumference)) +
  facet_wrap(~tree2, labeller = labeller(tree2 = tree.lab)) +
  geom_point()

以下旧样式代码仍然有效,但已弃用(ggplot2 版本 3.3.5 警告“警告消息:贴标机 API 已更新。采用 variablevalue 参数的贴标机现已弃用。请参阅贴标机文档。” ):

vlabeller <- function (variable, value) {
  return(tree.lab[value])
}

ggplot(Orange, aes(x = age, y = circumference)) +
  facet_wrap(~tree2, labeller = vlabeller) +
  geom_point()

现在有什么合适的方法来做到这一点?即使没有bquote...

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    基本上,对于您的列表,您需要更新 vlabeller 以使用 as_labeller 函数。 default=identity 防止表达式被强制转换为文本。

    vlabeller <- as_labeller(function (value) {
      tree.lab[value]
    } , default=identity)
    

    为避免 bquote,您可以使用表达式列表。这是一个帮助函数,它可以使它更容易使用。

    label_expressions <- function(values) {
      stopifnot(is.expression(values))
      as_labeller(function(x) {
        if (is.null(names(values))) {
          x <- seq_along(x)
          if (length(x)!=length(values)) warning(paste0("Number of labels(", 
            length(values), ") does not match number of values (", length(x), ")"))
        }
        as.list(values[x])
      }, default=identity)
    }
    

    然后你可以绘制你的情节

    tree.lab <- expression(
      T1 = "Tree 1"[test], 
      T2 = "Tree 2", 
      T3 = "Tree 3",  
      T4 = "Tree 4", 
      T5 = "Tree 5"
    )
    
    ggplot(Orange, aes(x = age, y = circumference)) +
      facet_wrap(~tree2, labeller = label_expressions(tree.lab)) +
      geom_point()
    

    请注意,tree.lab 是一个表达式对象,因此所有值都不会被解析并保留为语言对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 2019-01-30
      相关资源
      最近更新 更多