R语言入门——ggplot2图例增加公式

目录

0、引言

在ggplot2中,图例添加公式(数学表达式)主要有以下几种方法,我会按常用程度和灵活性排序介绍

1、方法1:使用 expression() 在 labs() 或 scale_*_manual() 中

library(ggplot2)

示例数据

r 复制代码
df <- data.frame(
  x = 1:10,
  y = 1:10,
  group = rep(c("A", "B"), each = 5)
)

在颜色图例中添加公式

r 复制代码
ggplot(df, aes(x, y, color = group)) +
  geom_point(size = 3) +
  labs(color = expression(alpha + beta^2))  # 图例标题使用公式

在图例标签中使用公式:

r 复制代码
ggplot(df, aes(x, y, color = group)) +
  geom_point(size = 3) +
  scale_color_manual(
    values = c("red", "blue"),
    labels = c(expression(alpha), expression(beta^2))  # 标签使用公式
  )

2、方法2:使用 bquote() 和 .() 插入变量值

动态变量

r 复制代码
my_var <- 2

ggplot(df, aes(x, y, color = group)) +
  geom_point(size = 3) +
  scale_color_manual(
    values = c("red", "blue"),
    labels = c(
      bquote(alpha == .(my_var)),           # 插入变量值
      bquote(beta^2 == .(my_var^2))
    )
  )

3、方法3:多行公式或复杂表达式

使用 atop() 或 paste() 组合多个表达式:

r 复制代码
# 多行公式
ggplot(df, aes(x, y, color = group)) +
  geom_point(size = 3) +
  scale_color_manual(
    values = c("red", "blue"),
    labels = c(
      expression(atop(alpha, beta)),          # 上下排列
      expression(paste(alpha, " = ", beta))   # 水平排列
    )
  )

4、方法4:图例标题使用复杂表达式

r 复制代码
ggplot(df, aes(x, y, color = group)) +
  geom_point(size = 3) +
  labs(
    color = expression(frac(alpha, beta) ~ gamma^{2})
  )

5、方法5:使用 scale_color_discrete() 的 labels 参数(推荐,比较自动)

r 复制代码
# 直接替换标签,颜色自动分配
ggplot(df, aes(x, y, color = group)) +
  geom_point(size = 3) +
  scale_color_discrete(
    labels = c("A" = expression(alpha),    # A 显示为 α
               "B" = expression(beta))     # B 显示为 β
  )

附录:常用的数学表达式语法

r 复制代码
# 常用符号
expression(alpha)           # α
expression(beta)            # β
expression(gamma)           # γ
expression(Delta)           # Δ
expression(Omega)           # Ω

# 上下标
expression(x^2)             # 上标
expression(x[2])            # 下标
expression(x^{2 + 3})       # 复杂上标

# 分数
expression(frac(a, b))      # a/b

# 根号
expression(sqrt(x))         # √x
expression(root(3, x))      # 三次根

# 求和/积分
expression(sum(x[i], i==1, n))
expression(integral(f(x) * dx))

# 希腊字母 + 上下标组合
expression(alpha[1]^2)

# 空格控制
expression(alpha ~ beta)    # 有空格
expression(alpha * beta)    # 无空格
expression(alpha + beta)    # 加号
相关推荐
RAN11426760085 小时前
1.3第一个程序的介绍
开发语言·qt
blue_ice .6 小时前
Verilog DDS 数字信号发生器:DAC 输出模拟波形与 ADC 回采观测
开发语言·单片机·嵌入式硬件·fpga开发
远翔调光芯片^138287988726 小时前
ECP5702能芯科技PD取电芯片在市场上的优势有哪些?
开发语言·人工智能·单片机·嵌入式硬件·智能家居
泡海椒7 小时前
规则引擎对比:JQuick-Java vs Drools 轻量场景选型对比
java·开发语言
泡泡鱼(敲代码中)7 小时前
Python 容器类型学习笔记:列表、元组、字典、集合
开发语言·笔记·python·pycharm
2501_933670798 小时前
平台招商运营校招能力模型:数据分析、SQL与增长场景拆解
开发语言
菜鸟~noob2338 小时前
【Bonjour】华为Peerium架构深度解析:从冯·诺依曼到百万处理器“一台计算机”,附MATLAB性能仿真【含matlab代码,可直接运行】
开发语言·matlab·华为·peerium
白远山9 小时前
24小时自助健身房系统开发实战:从需求分析到完整指南
java·开发语言·数据库·数据挖掘·需求分析
shmily麻瓜小菜鸡11 小时前
TDD(测试驱动开发)详解
开发语言·javascript·typescript·node.js·ecmascript
三克的油11 小时前
java-学习1
java·开发语言·学习