R 在ggplot轴类别标签中正确显示化学式

R 在ggplot轴类别标签中正确显示化学式,r,parsing,ggplot2,subscript,chemistry,R,Parsing,Ggplot2,Subscript,Chemistry,我正在绘制一个以化学式为类别的数据集,以及与之相关的值: data <- data.frame(compound = factor(c("SiO[2]", "Al[2]O[3]", "CaO")), value = rnorm(3, mean = 1, sd = 0.25)) 给出此错误消息: Error in parse(text = x, srcfile = NULL) : 1:6: unexpected symbol 1: Al[2]O

我正在绘制一个以化学式为类别的数据集,以及与之相关的值:

data <- data.frame(compound = factor(c("SiO[2]", "Al[2]O[3]", "CaO")),
                value = rnorm(3, mean = 1, sd = 0.25))
给出此错误消息:

Error in parse(text = x, srcfile = NULL) : 1:6: unexpected symbol
1: Al[2]O
         ^

有人能帮忙吗?我以前在x轴和x轴标签上成功地做到了这一点(通过
labs()
bquote()
或类似方法),我可以看到解决这个问题的各种线程,但相同的解决方案似乎不适用于类别标签。

更新:终于得到了正确的
parse()
例程,因此,如果化学物质已经在数据框中正确格式化,那么它们可以简单地被解析以显示正确的标签。(请注意,氧化铝需要瓷砖(~)字符)

库(tidyverse)
图书馆(rlang)
#> 
#>附加包:“rlang”
#>以下对象已从“package:purrr”屏蔽:
#> 
#>%@%,作为函数,展平,展平chr,展平dbl,展平int,
#>展平lgl、展平raw、调用、列出、修改、预处理、,
#>拼接
化合物=c(“SiO[2],“Al[2]~O[3],“CaO[1]”)
数据%
ggplot(aes(x=化合物,y=值))+
geom_col()+
比例x离散(标签=rlang::解析表达式)

由(v0.3.0)于2019-11-21创建


上一次更新:将代码替换为更具可扩展性的翻译表,以获得
bquote()
表达式。同样的基本思想,但现在不仅仅是标签中的硬接线,所以应该使用过滤器、刻面等


图书馆(tidyverse)
化合物=c(“SiO[2],“Al[2]O[3],“CaO[1]”)
翻译=c(“SiO[2]”=bquote(SiO[2]),
“Al[2]O[3]”=bquote(Al[2]~O[3]),
“CaO[1]”=bquote(CaO))

data最近写了一个相当长的
bquote()
答案。也许这会有帮助?我想你应该把
bquote()
东西隔离到
labs()
标签调用。哦,抱歉,刚才注意到你已经尝试了
labs()
bquote()
。如果您可以使用
dput()
函数包含示例数据,这将有助于我和其他人回答您的问题。谢谢@ravic。链接到的示例略有不同,因为非标准字符位于轴标签本身,而不是轴上的类别。我认为我问题中的虚拟数据足以重现问题,但如果我遗漏了什么,请告诉我!比看起来更难,但我想我现在有一个可行的解决方案给你。“比看起来更难”-你没有错!谢谢你!这就是诀窍。如果你/任何人有什么好主意的话,我仍然会对更系统地做这件事感兴趣(因为当涉及到比我的小reprex更多的公式时)。但现在,问题解决了。再次谢谢,酷。谢谢你的帮助!好的@TimM,这让我感到困扰,尽管它以前工作过,但现在最后一次更新实际上做了您想要做的事情——解析您已经在数据帧中维护的表达式。呸。不要再那样做了。:)谢谢太棒了!
Error in parse(text = x, srcfile = NULL) : 1:6: unexpected symbol
1: Al[2]O
         ^