将图例标签改为在分面数据上包含下标和上标表达式
我想在一个带分面的ggplot上修改标签。新标签中包含下标和上标。我在Stack Overflow上看过类似的问题,但我的代码里有问题,需要帮忙把它找出来。
先说第一点,下面是数据框和代码本身的概要:
'data.frame': 99 obs. of 12 variables:
$ Sample: chr "A-HCl" "A-HCl" "A-HCl" "A-HCl" ...
$ Mill : chr "Aspa" "Aspa" "Aspa" "Aspa" ...
$ Acid : chr "HCl" "HCl" "HCl" "HCl" ...
$ Step : num 0 1 2 3 4 5 6 7 8 9 ...
$ pH : num 11.55 10.31 8.7 7.67 7.77 ...
$ Na : num 6097 5991 5819 5921 6043 ...
$ Mg : num 0.405 22.524 333.229 553.882 879.715 ...
$ Al : num 0.446 0.459 0.525 0.508 0.503 ...
$ K : num 549 505 501 515 536 ...
$ Ca : num 2.17 1.68 94.49 676.56 1082.46 ...
$ Mn : num 0.0188 0.0058 0.1296 0.9737 6.0996 ...
$ Fe : num 0.0517 0.0379 0.0327 0.0332 0.0234 ...
myplot<-
ggplot(gather(Maj.plot, key=Element, value="value", -"Step", -"Sample", -"Mill", -"pH", -"Acid"),
aes(x=pH, y=as.numeric(value), colour=Acid, group=Sample, shape=Mill) ) +
geom_point() +
geom_line()+
facet_wrap(~ Element, scales = "free") +
scale_x_continuous(breaks = seq(0, 10, 2))+
theme_bw()
它生成了如下漂亮的图形:

但我想做的是把颜色标签从HCl、H2SO4和 Fe-SO4改为HCl、H2SO4和 Fe2+ + H2SO4。本质上这是这个表达式:
"HCl", bquote("H"[2]*"SO"[4]),bquote("Fe"^"2+"+"H"[2]*"SO"[4])
我尝试过的(参考StackOverflow上的类似示例):
- 在geom_point中设置aes:没有任何反应(也就是ggplot忽略了它)
- 在geom_line中设置aes:没有任何反应(也就是ggplot忽略了它)
- 使用scale_colour_manual( labels = c("HCl", bquote("H"[2]*"SO"[4]),bquote("Fe"^"2+"+"H"[2]*"SO"[4]) ): 得到错误 “Insufficient values in manual scale. 3 needed but only 0 provided”
- 使用scale_colour_manual( names= c("HCl", "H2SO4", "Fe-SO4"), labels = c("HCl", bquote("H"[2]*"SO"[4]),bquote("Fe"^"2+"+"H"[2]*"SO"[4]) )):得到错误 " Error in discrete_scale(aesthetic, "manual", pal, breaks = breaks, limits = limits, :
unused argument (names = c("HCl", "H2SO4", "Fe-SO4"))" - 把新标签存入向量并在scale_colour_manual的不同测试中把向量作为names或 labels使用:出现错误,但记不清楚是unused argument还是insufficient values,可能两者都有。
我通过使用scale_colour_manual( values = c("blue", "green", "red"), labels = c("HCl", bquote("H"[2]*"SO"[4]),bquote("Fe"^"2+"+"H"[2]*"SO"[4]) )) 来让它工作了,但这会改变实际使用的颜色(这不是我想要的,因为我希望所有图的颜色保持一致)。所以问题似乎在于我不能告诉ggplot将标签设在哪些颜色上。
我到底在做错什么?如果不是names和 values,正确的参数应该是什么?
解决方案
为了保持ggplot2的“默认”颜色方案,一种潜在的做法是通过 scale_colour_hue() 为颜色标尺指定 'labels'(使用内置的mtcars数据集):
mtcars %>%
ggplot(aes(x=disp, y=hp, colour=factor(cyl),
group = factor(cyl), shape=factor(gear))) +
geom_point() +
geom_line() +
facet_wrap(~ carb, scales = "free") +
theme_bw() +
scale_colour_hue(labels = c("4" = "HCL",
"6" = bquote("H"[2]*"SO"[4]),
"8" = bquote("Fe"^"2+"+"H"[2]*"SO"[4])))

创建于2026-06-02,使用 reprex v2.1.1.9000
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。