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_grids
和ggplot2
的标签中包含数学表达式。
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)标签实战