You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ggplot2 facet标签中使用含δ、上标、千分号的数学表达式

解决方法

要在facet_grid的y轴分面标签中实现δ符号、数字上标和千分号效果,有两种简洁的实现方式:

方法一:提前修改数据中的标签(推荐)

先将数据里的variable列转换为支持plotmath语法的表达式,再让ggplot解析这些表达式:

  1. 加载处理数据的包(如果未加载):
library(dplyr)
library(stringr)
  1. 修改group.data的variable列:
group.data <- group.data %>%
  mutate(variable = case_when(
    variable == "d13C" ~ expression(delta^{13}*C~(‰)),
    variable == "d15N" ~ expression(delta^{15}*N~(‰)),
    variable == "d34S" ~ expression(delta^{34}*S~(‰)),
    # 如果有其他变量,保留原标签
    TRUE ~ as.expression(variable)
  ))
  1. 在facet_grid中指定解析标签的函数:
    将原代码中的facet_grid行替换为:
facet_grid(variable ~ Species, scales = "free_y", labeller = label_parsed)

方法二:直接在facet中用自定义标签解析器

无需修改原始数据,直接通过labeller函数动态转换标签:

将原代码中的facet_grid行替换为:

facet_grid(variable ~ Species, scales = "free_y", 
           labeller = labeller(variable = function(x) {
             # 替换d为delta,给数字加上标,添加千分号
             parsed_labels <- str_replace(x, "d(\\d+)(.)", "delta^{\\1}\\2~(‰)")
             # 解析为plotmath表达式
             parse(text = parsed_labels)
           }))

修改后的完整脚本

library(ggplot2)
library(dplyr)
library(stringr)

# 方法一的完整代码(先修改数据)
group.data <- group.data %>%
  mutate(variable = case_when(
    variable == "d13C" ~ expression(delta^{13}*C~(‰)),
    variable == "d15N" ~ expression(delta^{15}*N~(‰)),
    variable == "d34S" ~ expression(delta^{34}*S~(‰)),
    TRUE ~ as.expression(variable)
  ))

group.violin<-ggplot(group.data, aes(x=Culture2, group = Culture2, y=value)) +
  stat_summary(aes(x = Culture2, y = value, color= Species, group = Species), fun = "mean", 
               geom = "line", lwd = 2, alpha = 0.5)+
  stat_summary(geom="point")+
  geom_violin(aes(x = Culture2, y = value, fill = Species), alpha = 0.4, color = NA)+
  geom_point(aes(x = Culture2, y = value, fill = Species), size = 3, color = "black", pch = 21,
             position = position_jitter(width = 0.05, seed = 12))+
  facet_grid(variable ~ Species, scales = "free_y", labeller = label_parsed) +
  xlab("")+ 
  ylab("")+
  theme_classic()+
  theme(strip.background = element_rect(colour = "black", fill = "grey85", size = 0.1),
        panel.border=element_rect(colour="black",size = 0.1, fill = NA),
        panel.spacing = unit(0.3, "lines"),
        axis.text.y = element_text(size = 12, colour = "black"),
        axis.title.x = element_blank(),
        axis.title.y = element_blank(),
        legend.position = "bottom",
        legend.text=element_text(size=12, face="italic"),
        legend.title=element_text(size=12,face="bold"),
        strip.text.x=element_text(size=12,face="bold.italic"),
        strip.text.y=element_text(size=12,face="bold"))

内容的提问来源于stack exchange,提问作者Marco ViCo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 02:01:33