ggplot2入门 学习笔记| 小提琴图怎么画?

简介: ggplot2入门 学习笔记| 小提琴图怎么画?

本文学习绘制简单小提琴图,包括介绍和绘图两部分,主要用到ggplot2包的geom_violin函数。

640.png

小提琴图是一种展示数据分布情况和数据统计信息的重要工具,能够看出数据的最大值、最小值、中位数、四分位数、分布密度、离群值等信息,它和箱线图比较类似。小提琴图怎么看?

640.png

从上往下看,依次为:

  • 离群点:表示超出范围的值
  • 上边界:数据的上界
  • 四分位:箱线图的箱子和小提琴图中央的黑色竖直线,都表示四分位的范围
  • 中心点;箱线图的箱子中央横线,小提琴图中间的点,表示中值。

绘图前准备工作

加载R包

library(ggplot2)
library(reshape2)

ggplot2包用于绘图,reshape2用于对数据矩阵进行处理,这两个R包很脸熟,未来可能经常会用到,推荐添加进配置文件自动载入。

载入数据

示例数据包含两列(第一列为分组信息,第二列为值),A组有7条数据,B组和C组有9个。这种数据就是用于ggplot绘图的标准格式,可以直接用于绘图。

> head(long_table)
   Grp Value
1 GrpA    10
2 GrpA    11
3 GrpA    11
4 GrpA    11
5 GrpA    12
6 GrpA    11

640.png

绘制小提琴图

绘图使用ggplot函数,依次进行:设置数据文件、初始化坐标轴、绘制小提琴图geom_violin、设置x轴标签显示方式、调整图例摆放位置,然后输入p生成plot。

p <- ggplot(long_table,aes(x=Grp,y=Value)) +
  geom_violin(aes(fill <- factor(Grp))) +
  theme(axis.text.x=element_text(angle=45,hjust=1,vjust=1)) +
  theme(legend.position="top")
p

绘图结果:

640.png

给小提琴图添加一些参数修饰,显示出中位数的点,用红色表示。

stat_summary(fun = median,
   geom="point",fill="red",
   shape=21,size=3)

640.png

小提琴图的上下端表示最值,看起来不太平滑,可以使用trim参数进行修改。能使结果图的上下端自动变得尖锐美观。

p <- p+ geom_violin(trim=F)

640.png

上面的内容是绘制小提琴图,为了进行对比,捎带学习一下简单的箱线图绘制方法。

绘制箱线图

在原始数据的基础上,利用rep生成一列新变量gender,然后利用geom_boxplot绘制箱线图,填充的内容的刚刚生成的gender(包含两水平的因子数据)

a <- c(rep(c('f',"m"),12),'f') #rep输出复制字符若干次
long_table$gender <- a
# 上面的代码用于添加一个新变量gender(包含f和m两个子项)
p <- ggplot(long_table,aes(x=Grp,y=Value)) +
  geom_boxplot(aes(fill=factor(gender)))
p

绘图结果:


640.png

笔者总结

  1. 绘图时每一步最好进行记录,以免返工时忘了曾经做了啥
  2. 原始数据保存好!
  3. 小提琴图有时比较奇怪,有可能是数据本身分布不均导致
  4. 图像主题参数太多,不宜挨个学习,宜遇上哪个学哪个

参考资料 :

1.https://www.jianshu.com/p/cd5b265ca11f

2.http://www.ehbio.com/Bioinfo_R_course

数据和代码参考生信宝典进行学习,后台私聊免费分享

END

© 素材来源于网络,侵权请联系后台删除

往期推荐:

文献丨群体转录组分析锁定关键转录因子

文献丨转录组RNA seq——青年阶段!

笔记丨ggplot2热图入门学习笔记

笔记丨PCA分析基本知识和数学原理

相关文章
|
6月前
|
人工智能 自然语言处理 算法
AI智能混剪视频大模型开发方案:从文字到视频的自动化生成·优雅草卓伊凡
AI智能混剪视频大模型开发方案:从文字到视频的自动化生成·优雅草卓伊凡
617 0
AI智能混剪视频大模型开发方案:从文字到视频的自动化生成·优雅草卓伊凡
|
机器学习/深度学习 XML Oracle
关系型数据库Oracle发展历程
【7月更文挑战第5天】
510 5
|
JavaScript 前端开发 Go
8 大博客引擎 jekyll/hugo/Hexo/Pelican/Gatsby/VuePress/Nuxt.js/Middleman 对比
探索各类博客引擎:Jekyll、Hugo、Hexo、Pelican、Gatsby、VuePress、Nuxt.js和Middleman的对比,包括语言、模板引擎、速度、社区活跃度等。了解每种引擎的优缺点,助你选择合适的博客构建工具。查看详细文章以获取更多实战和安装指南。
|
数据采集 存储 监控
构建高效爬虫系统:设计思路与案例分析
构建高效爬虫系统涉及关键模块如爬虫引擎、链接存储、内容处理器等,以及用户代理池、IP代理池等反反爬策略。评估项目复杂性考虑数据规模、网站结构、反爬虫机制等因素。案例分析展示了电子商务价格比较爬虫的设计,强调了系统模块化、错误处理和合规性的重要性。爬虫技术需要不断进化以应对复杂网络环境的挑战。
490 1
|
JavaScript 前端开发 UED
Vue与uni-app开发中通过@font-face巧妙引入自定义字体
Vue与uni-app开发中通过@font-face巧妙引入自定义字体
869 9
R 问题|如何合并图形并共享同一个图例?
R 问题|如何合并图形并共享同一个图例?
745 0
|
机器学习/深度学习 算法 数据可视化
R语言惩罚logistic逻辑回归(LASSO,岭回归)高维变量选择的分类模型案例
R语言惩罚logistic逻辑回归(LASSO,岭回归)高维变量选择的分类模型案例
|
SQL 存储 数据库连接
如何使用 FreeSql 无缝接替 EF Core ?
在使用 `EF Core` 作为默认的 `ORM` 工具操作数据库时,项目中我们或许只能接触到 `DbContext` 对象,没法直接获取 `db` 数据库连接信息,假如有小伙伴想接入 `FreeSQL` 继续使用熟悉的模式,那该怎么办呢?此时我们可以这样操作,为了不影响原有项目结构的操作,又想接入 `FreeSQL` 的小伙伴们,通过上面的方式我们就可以使用 `FreeSQL` 无缝替换 `EF Core`。
488 1
如何使用 FreeSql 无缝接替 EF Core ?