facet_grid label_both 将标签文本动态方面变量包装在闪亮的图中

facet_grid label_both wrap the label text dynamic facet variables in shiny plot

所以我正在努力让情节像我想要的那样运作。我有一个 facet_grid,其中分面变量是在闪亮的应用程序中动态确定的...

facet_grid(facetFormula, labeller = label_both)

其中...

facetFormula <- as.formula(paste(input$filter2Var, "~", input$filter1Var))

这工作正常,除了我宁愿换行符作为变量“名称:值”分隔符而不是冒号。我已经研究了其他参数(multi_linesep),使用 label_both()label_wrap_gen()labeller() 而不是 label_both 没有括号。 .. 而且我无处可去,可能会绊倒已经很复杂的动态变量问题。我已经尝试使用 !!sym()as.formula() 来处理这些不同函数的参数,但我真的不知道我在做什么,并且可能在尝试添加一些简单的文本换行时弄乱了几件事我的方面标签。非常感谢任何帮助!

更新...

cases <- c("case1_has_long_name", "case2_long_too", "case3_long_as_well", "case4_also_long", "case5_long")
the_first_variable <- cases[round(runif(100,1,3))]
variable_number_two <- cases[round(runif(100,1,5))]
var1 <- "the_first_variable"
var2 <- "variable_number_two"
facetFormula <- as.formula(paste(var1, "~", var2))
myX <- runif(100,0,10)
myY <- runif(100,-5,5)
myData <- data.frame(myX, myY, the_first_variable, variable_number_two)
ggplot(myData, aes(x = myX, y = myY)) +
  geom_point(alpha = .5) +
  facet_grid(facetFormula,
             labeller = label_both)

这生成了一个关于我的问题的图,其中方面标签太大。我只想学习如何使标签包装。考虑作为一个简单的开始,而不是“:”作为变量名和变量值之间的分隔符,我可以使用“\n”作为分隔符。将我的方面变量指定为变量本身的尴尬来自于它们在闪亮的应用程序中动态定义。

包装面标签可以像这样实现:

标签器将带有变量名称和标签的 df 作为其第一个参数。在您的情况下,一个 df 带有一列。该列包含标签,列名是变量名。

为了包装标签,我在 label_both 周围使用了一个包装函数,在将操纵的 df 传递给 label_both 之前,我首先包装标签。为了使包装起作用,我用空格替换了所有下划线。

library(ggplot2)

my_label <- function(x) {
  # Wrap var names
  names(x)[[1]] <- stringr::str_wrap(gsub("_", " ", names(x)[[1]]), 10)
  # Wrap value labels
  x[[1]] <- stringr::str_wrap(gsub("_", " ", x[[1]]), 10)
  # Call label both with sep "\n"
  label_both(x, sep = "\n")
}

ggplot(myData, aes(x = myX, y = myY)) +
  geom_point(alpha = .5) +
  facet_grid(facetFormula, labeller = my_label)