r - 沿一个面轴解析标签,沿另一个面轴未解析标签

标签 r ggplot2 facet

我试图找到一个方便的解决方案,以解决一个场景维度的多行纯文本标签和另一个分面维度的 plotmath 样式数学表达式。多行条形标签的各种解决方案(例如 here )对我来说有点笨重;我在 snake_case 中有因子标签并且希望能够以编程方式将它们全部转换为多行版本而无需下降到 substitute(bquote(parse(...)) hell (尽管沿着这些路线的解决方案也将被接受)。

我的方向是(尝试)编写一个适用于 label_parsed() 的自定义贴标机。或者不理会标签,具体取决于它们是否包含换行符。我似乎无法为解析的内容获得非常正确的语法。多行,未解析的东西的当前结构是

List of 1
 $ : chr [1:4] "peak\ntime" "peak\nvirulence" "equilibrium\nvirulence" "relative\npeak"

哪个有效,但解析的东西是
List of 3
 $ :List of 1
  ..$ :  expression(beta)
 $ :List of 1
  ..$ :  expression(gamma)
 $ :List of 1
  ..$ :  expression(x[1])

哪个没有。申请unlist(r)unlist(r,recursive=FALSE)这个结构都给出了错误信息......

结果(如下所示)是所有三个解析的标签都堆积在第一列中......
?label_parsed

The return value must be a rectangular list where each 'row' characterises a single facet. The list elements can be either character vectors or lists of plotmath expressions. When multiple elements are returned, they get displayed on their own new lines (i.e., each facet gets a multi-line strip of labels).



设置:加载包,定义新旧标签
library(ggplot2); theme_set(theme_bw())
orig_sum_labs <- c("peak_time","peak_vir","eq_vir","rel_peak")
new_sum_labs <- c("peak time","peak virulence","equilibrium virulence",
                  "relative peak")
fake <- data.frame(f1=rep(orig_sum_labs,each=12),
                   f2=factor(rep(1:3,16),levels=1:3,
                             labels=c("beta","gamma","x[1]")),
                   x=rep(1:4,12),y=rep(1:4,12))

将换行符放入标签:
nn <- gsub(" ","\n",new_sum_labs)
fake$f1 <- factor(fake$f1,levels=orig_sum_labs,labels=nn)

我的贴标机功能:
L <- function(labels,multi_line=TRUE) {
    r <- if (all(grepl("\n",labels[[1]]))) {
        list(as.character(labels[[1]]))
    } else {
        label_parsed(labels[[1]],multi_line=multi_line)
    }
    ## browser()
    return(r)
}
class(L) <- "labeller"

试试看:
ggplot(fake,aes(x,y))+geom_point()+
    facet_grid(f1~f2,labeller=L)

enter image description here

最佳答案

哎呀。这有点神奇(我很乐意接受 清楚地解释了正在发生的事情 的答案),但我设法解决了我的问题。在我上面的贴标功能中,

label_parsed(labels[[1]],multi_line=multi_line)

不起作用,但是
label_parsed(labels,multi_line=multi_line)

作品...

enter image description here

关于r - 沿一个面轴解析标签,沿另一个面轴未解析标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37399450/

相关文章:

r - 将 data.frame 列转换为向量

r - 如何选择列以使用 dplyr 中的中值函数?

r - k-均值聚类与新的训练数据?

solr - 从Solr方面获取结果

r - 在一些图中添加 y=0 行 facet_grid ggplot2

SOLR 分面搜索与 OR 运算符一样返回分面计数

r - ggplot : text printed by geom_text is not clear

r - 如何使用 gganimate 创建带有风动画的轮廓?

r - 将 geom_hline 图例添加到现有的几何条图例

r - 你如何具体排序 ggplot2 x 轴而不是字母顺序?