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

Posted

技术标签:

【中文标题】R:ggplot2:facet_grid:如何在少数(不是全部)标签中包含数学表达式?【英文标题】:R : ggplot2 : facet_grid : how include math expressions in few (not all) labels? 【发布时间】:2016-09-02 12:16:13 【问题描述】:

我在ggplot2 上遇到了一些问题。我阅读了大部分相关帖子,尝试了一些方法,但没有找到任何真正的解决方案。

我想在facet_gridsggplot2 的标签中包含数学表达式。

在原始文件中,我无法写入名称 µg.L-1 在标题和轴上我可以做到,例如: qplot(day, activity, data=a) +xlab(expression("100 µg "*.L^"-1"*"")) : 效果很好。

如何处理 facet_labels ? 我可以设置级别并重命名标签因子,但不考虑表达式,例如:

levels(a$group) <- c("control", expression("100 µg "*.L^"-1"*""))

qplot(…, facets=~group)

结果:

facet 1 的标签写在图上:control

面 2 的标签写在图上:“100 µg ".L^"-1""" ...

我不想这样。

我不想使用facet_grid(.~group, labeller=label_bquote(…)),因为我不希望我的所有标签都遵循相同的表达式。我想手动一一编辑标签... 我尝试使用 bquote(…) 而不是 expression(…) 但同样的糟糕结果发生了

有人对此有任何线索吗?


一个例子:我定义了一个数据框:

activity<- as.numeric(c("44","41","48","43","42","45","44","39", "47", "68", "88", "57"))
group<-c("first","first","first","first","first","first",
         "second","second","second","second","second","second")
day<- c("0", "0", "0", "20","20", "20","0", "0", "0", "20","20", "20" )
a<-data.frame(activity, group, day)

我画了:

require (ggplot2) 

qplot(day, activity, facets=.~group, data=a, ylim=c(25,90))

我想更改构面标签的名称和 y 轴:

levels(a$group)<- c("control", expression("100 µg "*.L^"-1"*""))
qplot(day, activity, facets=.~group, data=a, ylim=c(25,90),
  ylab=expression("fmol "*.µl^"-1"*""))

它适用于 y 轴,但是对于构面标签,它不起作用... 有什么线索吗?

【问题讨论】:

如果您提供更多 reproducible example 以及示例输入数据,我们可以将其复制/粘贴到 R 中以重新创建问题,这将更容易提供帮助。 Paul - 查看这篇文章“在 ggplot2 中将构面标签更改为数学公式”***.com/questions/11979017/… @MrFlick :谢谢,详情见下文... @Technophobe01 :谢谢,我看到了这篇文章,但在我的上下文中无法弄清楚如何做...... 这项工作是否有效:ggplot(a, aes(day, activity)) + facet_grid(.~group, labeller= label_parsed) 【参考方案1】:

建议的解决方案:

先决条件:

activity <- as.numeric(c("44", "41", "48", "43", "42", "45", 
  "44", "39", "47", "68", "88", "57"))
group <- c("first", "first", "first", "first", "first", "first", 
  "second", "second", "second", "second", "second", "second")
day <- c("0", "0", "0", "20", "20", "20", "0", "0", "0", "20", 
  "20", "20")
a <- data.frame(activity, group, day)
require(ggplot2)
levels(a$group) <- c("control", expression("100 µg " * .L^"-1" * ""))

建议的解决方案:

p1 <- qplot(day, activity, data = a)
p1 + facet_grid(. ~ group, labeller = label_parsed)

结果:

说明

我们将标签结构创建为字符串,并在其中创建公式,注意使用~ 替换空格...然后告诉facet_grid() 通过设置@ 来解析作为公式传递给它的标签字符串987654329@...

注意:显示的详细信息在?plotmath 中进行了描述,但请注意geom_text()facet_grid() 使用字符串,而不是表达式。

我希望以上内容有所帮助。

参考:

查看 Hagley Wickham 的贴标机页面...:https://github.com/hadley/ggplot2/wiki/labeller

【讨论】:

非常感谢,这正是我一直在寻找的,而且效果很好。我认为“label_parsed”将所有标签放在同一个数学表达式中,但它实际上“分析”了语法结构......谢谢;) 太棒了 - Paul 你能把它标记为已回答吗? (勾选这解决了你的问题。)这将帮助其他人找到它。 这太棒了...也适用于bquote(),例如factor( df$measure, levels = c("area", "length"), labels = c(bquote(area ~~ (cm^2)), bquote(length ~~ (cm)))) 当前贴标机文档:ggplot2.tidyverse.org/reference/labeller.html【参考方案2】:

您可以使用 label_parsed,前提是您的所有标签都是有效的表达式(如有必要,您可以将文本放在引号内)

library(ggplot2) 
levels(a$group)<- c("'control test'", "100~mu*g*'.L'^-1")
ggplot(a) + facet_grid(.~group, labeller=label_parsed)

【讨论】:

谢谢,label_parsed 正是我想要的,但我不明白如何正确处理它...谢谢 ;)

以上是关于R:ggplot2:facet_grid:如何在少数(不是全部)标签中包含数学表达式?的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化分面图(facet_grid):ggplot2可视化为分面图的每个组添加平均值线条

R语言ggplot2可视化使用facet_grid构建多个子图(facet面图)并自定义每个子图(facet面图)的文本实战

R语言ggplot2可视化分面图(facet_grid):去除分面图灰色矩形框以及框中的标签Getting rid of facet_grid labels on those gray boxes

R语言ggplot2可视化在分面图(facet_grid)的条形图上添加计数(count)或者百分比(percent)标签实战

R语言ggplot2可视化分面图(facet_grid)自定义设置分面图标签栏的背景色(默认背景色为灰色)

R语言高维数据可视化| ggplot2中会“分身术”的facet_wrap()与facet_grid()姐妹花