如何使用网格编辑ggplot2对象以将数学表达式添加到构面标签?

Dan*_*Dan 6 r ggplot2 r-grid

我需要使用ggplot2中的facet_wrap()将希腊字母放入facet标签中.我发现了一个描述facet_grid()的链接.我使用以下代码将其应用于我的数据:

levels(parameters) <- c(expression(alpha), expression(beta))  
p + facet_grid(.~parameters, labeller = label_parsed)
Run Code Online (Sandbox Code Playgroud)

这很有效,完全符合我的要求.但是,我需要使用facet_wrap()(为两个参数获取单独的y轴,并在不同的列和行中绘制更多参数).我尝试了以下方法:

p + facet_wrap(.~parameters, labeller = label_parsed)  ,  or  
p + facet_wrap(.~parameters)
Run Code Online (Sandbox Code Playgroud)

但是这没有用,因为facet_wrap中没有"贴标机"功能.如何使用网格完成?

rcs*_*rcs 9

这个例子应该让你开始:

library("ggplot2")
library("grid")

d <- ggplot(iris, aes(Sepal.Length, Sepal.Width)) +
            geom_point() +
            facet_wrap(~Species)
grob <- ggplotGrob(d)
strip_elem <- grid.ls(getGrob(grob, "strip.text.x", grep=TRUE, global=TRUE))$name

grob <- grid::editGrob(grob, strip_elem[1], label=expression(alpha[1]))
grob <- grid::editGrob(grob, strip_elem[2], label=expression(beta^2))
grob <- grid::editGrob(grob, strip_elem[3], label=expression(hat(gamma)))

grid.draw(grob)
Run Code Online (Sandbox Code Playgroud)

修改了grob

更新:这适用于ggplot20.9.3版本(尽管使用grid是一种修改ggplot2图形的脆弱方法)

grob[["grobs"]][["strip_t.1"]][["children"]][[2]][["label"]] <- expression(alpha[1])
grob[["grobs"]][["strip_t.2"]][["children"]][[2]][["label"]] <- expression(beta^2)
grob[["grobs"]][["strip_t.3"]][["children"]][[2]][["label"]] <- expression(hat(gamma))
grid.draw(grob)
Run Code Online (Sandbox Code Playgroud)

  • `geditGrob`已从ggplot2中删除:https://github.com/hadley/ggplot2/commit/1bc4d1e179536e3404418a9589d982c242a40793 (2认同)