如何在分面中添加数学表达式标签?

简介: 如何在分面中添加数学表达式标签?

简介

最近自己论文中需要绘制不同公式得到结果的分面图,并且在标签中给出表达式。对于这样的需求,一时半会想不出来。经过一顿搜索,得到了以下不错的解决方案[1]

关于分面的基础教程可见以前写的推文:R可视乎|分面一页多图。拓展的技巧可见:ggplot 分面的细节调整汇总。老俊俊的生信笔记也给出了几篇不错的分面技巧介绍:使用 jjAnno 对分面添加注释ggplot2 如何在不同分面添加不同文字ggplot2 如何在不同分面添加不同图形

构建模拟数据

老样子,给出模拟数据,读者根据自己数据进行转换即可。

# 相关包
library(ggplot2)
library(grid)
mydf <- data.frame(letter = factor(rep(c("A", "B", "C", "D"), each = 20)), x = rnorm(80), y = rnorm(80))
head(mydf)



基本绘图

简单绘制出数据 x,y 之间的散点图和拟合曲线,并根据分类数据 letter 进行分面。

ggplot(mydf, aes(x = x, y = y)) + 
  geom_smooth(method = "lm") + 
  geom_point() + 
  facet_wrap(~ letter)


设置表达式标签

使用 expression() 函数定义表达式标签,存储到 f_names。并定义 f_labeller 提取 f_names 中的值。之后在分面中使用参数 labeller = f_labeller

当然,也可以使用 latex2exp 包中的 TeX(), 用类似 LeTeX 语句写表达式。例如:TeX("$\\alpha_2$")

f_names <- list('A' = expression(paste(alpha[2])), 'B' = expression(Gamma(3,4)), 'C' = expression(paste(y = beta[0] + beta[1]*x[1])), 'D' = expression(delta))
f_labeller <- function(variable, value){return(f_names[value])}
ggplot(mydf, aes(x = x, y = y)) + 
  geom_smooth(method = "lm") + 
  geom_point() + 
  facet_wrap(~ letter, labeller = f_labeller)

修改主题

ggplot(mydf, aes(x = x, y = y)) + 
  geom_smooth(method = "lm",color = "#e99e9c",fill = "#98c0d7") + 
  geom_point(color = "gray60") + 
  facet_wrap(~ letter, labeller = f_labeller,scales = "free") +
  theme_bw() + ylab("Value") + xlab("Time") + #主题设置
  theme(panel.grid = element_blank(), 
        strip.background = element_blank())


添加中文标签

加入想要添加中文标签,只需修改:

# 设置标签
f_names <- list('A' = "庄闪闪", 'B' = "庄亮亮", 
                'C' = "庄晶晶", 'D' = "庄暗暗")

如果存在中文字体乱码,请参考这篇推文:R问题|解决PDF导出字体无法显示的问题。即在文中前面加入以下代码:

library(showtext)
showtext.auto()

此时绘制出来的结果如下:



参考资料

[1]

解决方案: https://stackoverflow.com/questions/19282897/how-to-add-expressions-to-labels-in-facet-wrap?noredirect=1&lq=1

目录
相关文章
|
1月前
|
测试技术
【动态规划】【字符串】【表达式】2019. 解出数学表达式的学生分数
【动态规划】【字符串】【表达式】2019. 解出数学表达式的学生分数
LaTeX数学模式中的矩阵
LaTeX数学模式中的矩阵
901 0
LaTeX数学模式中的矩阵
|
10月前
|
设计模式 Java Spring
这个无敌设计,可以解析并运算任意数学表达式
下面用解释器模式来实现一个数学表达式计算器,包含加、减、乘、除运算。 首先定义抽象表达式角色IArithmeticInterpreter接口。
75 0
|
数据可视化 数据挖掘 Python
跟着Nature Metabolism学作图:R语言ggplot2热图组合树图和双层分组标记
跟着Nature Metabolism学作图:R语言ggplot2热图组合树图和双层分组标记
|
人工智能 资源调度
LaTeX:公式常用字符和表达式
LaTeX 公式常用字符和表达式
219 0
|
算法
数学:分数的加减乘除模板(二)
数学:分数的加减乘除模板
60 0
数学:分数的加减乘除模板(二)
|
自然语言处理
Q&A | 热图的单元格颜色和数值标签可以不一一对应吗?
Q&A | 热图的单元格颜色和数值标签可以不一一对应吗?
131 0
Q&A | 热图的单元格颜色和数值标签可以不一一对应吗?
数学:分数的加减乘除模板(一)
数学:分数的加减乘除模板
53 0
【数理逻辑】谓词逻辑 ( 判断一阶谓词逻辑公式真假 | 解释 | 示例 | 谓词逻辑公式类型 | 永真式 | 永假式 | 可满足式 | 等值式 )
【数理逻辑】谓词逻辑 ( 判断一阶谓词逻辑公式真假 | 解释 | 示例 | 谓词逻辑公式类型 | 永真式 | 永假式 | 可满足式 | 等值式 )
400 0
|
自然语言处理
【数理逻辑】谓词逻辑 ( 个体词 | 个体域 | 谓词 | 全称量词 | 存在量词 | 谓词公式 | 习题 )(一)
【数理逻辑】谓词逻辑 ( 个体词 | 个体域 | 谓词 | 全称量词 | 存在量词 | 谓词公式 | 习题 )(一)
722 0