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

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

简介

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

目录
相关文章
|
前端开发 定位技术
|
编解码 程序员 atlas
Unity 之 图集属性详解和代码示例 -- 拓展一键自动打包图集工具
图集只是当所有给低昂的纹理需要相同的着色器时采用的一种方法,如果一些纹理需要通过着色器应用独立的图形效果,它们就必须分离到自己的材质中,并在单独的组中打图集。
2163 0
Unity 之 图集属性详解和代码示例 -- 拓展一键自动打包图集工具
|
7月前
|
机器学习/深度学习 人工智能 算法
停车场导航系统核心技术功能解析,助力造城市便捷项目改造
本文通过停车场反向寻车导航系统的核心技术:蓝牙定位和ai导航,以及车位引导、反向寻车、预约车位等功能,说明了停车场智慧升级带来的优势,如需获取智慧停车场反向寻车方案可前往文章末尾获取
358 3
|
7月前
|
人工智能 Java 物联网
没有好的学历,Java开发未来的路应该怎么走?
在数字化时代,Java开发者即使没有高学历,也能通过拥抱新兴技术(如大模型应用与鸿蒙系统开发)、积累实战经验、持续学习新技能等途径实现职业突破。从参与开源项目到关注行业动态,再到规划技术专家或管理路线,建立人脉网络并利用教育平台提升能力,开发者可拓宽技术边界,适应日新月异的技术需求,在未来发展中占据一席之地。
|
数据可视化 数据挖掘 定位技术
MATLAB数据可视化
【10月更文挑战第8天】本文详细介绍了MATLAB中的数据可视化功能,涵盖基本绘图、特定绘图类型(如三维绘图、极坐标图)、高级图形功能(如自定义图形属性、子图、交互式图形、动画与动态可视化)以及地理数据可视化工具箱等内容。同时,文章还提供了性能优化建议,帮助用户在处理大型数据集时提升绘图效率。
|
存储 人工智能 供应链
AI与能源系统:优化能源生产和消费
【10月更文挑战第9天】在当前全球能源转型的关键时期,人工智能(AI)正逐渐成为推动能源系统优化与升级的重要力量。本文探讨了AI在能源生产、分配、存储和消费等方面的应用。在能源生产中,AI通过智能预测与调度、故障预警及优化资源配置等方式提升效率;在能源分配与存储方面,AI推动智能电网管理和储能系统优化;在能源消费端,AI实现精细化管理,如智能家庭能源管理和工业节能。未来,AI将进一步融入能源系统的各个环节,促进能源的高效配置与可持续发展。然而,面对数据安全和算法透明度等挑战,需加强监管与伦理审查,确保AI技术健康发展。
|
安全 应用服务中间件 测试技术
2023年山东省职业院校技能大赛信息安全管理与评估二三阶段样题
2023年山东省职业院校技能大赛信息安全管理与评估二三阶段样题
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp微信小程序的智能家居系统的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的智能家居系统的详细设计和实现
389 0
|
Java Docker 容器
使用docker-compose启动指定jar包
使用docker-compose启动指定jar包
636 0