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

Posted

技术标签:

【中文标题】facet_grid label_both 将标签文本动态构面变量包装在闪亮图中【英文标题】:facet_grid label_both wrap the label text dynamic facet variables in shiny plot 【发布时间】:2020-10-21 01:40:18 【问题描述】:

所以我正在努力让情节按我的意愿运作。我有一个 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 minimal reproducible example 和 How to Ask 谢谢彼得,你说得对……我用更好的代码和数据编辑了我的问题 【参考方案1】:

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

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

为了包装标签,我在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)

【讨论】:

这太棒了,谢谢!如果使用像 label_both() 这样的函数,我真的很挣扎,如何为它定义参数。你实现事物的方式...... ggplot 定义参数并传递它们,避免了我的所有困惑。这里发生了很多事情,我绝对无法独自解决这个问题,谢谢!

以上是关于facet_grid label_both 将标签文本动态构面变量包装在闪亮图中的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 facet_grid 将计数标签添加到直方图的每个条形?

摆脱那些灰色盒子上的 facet_grid 标签?

如何在 R 中自定义 Facet_Grid 字体标签

R:ggplot2:facet_grid:如何在少数(不是全部)标签中包含数学表达式?

在 ggplot2 facet_grid 中旋转切换的构面标签

如何将构面标签移动到图表顶部?