【SCI·绘图】升级版·小提琴图-云雨图(带R代码分享)

2021-08-27 02:22:06, 多层组学定制服务 上海欧易生物医学科技有限公司


点击上方蓝色字体关注我们

蛋白组学、代谢组学服务专家

小荷才露

箱线图、小提琴图和蜂窝图,想必已经很常见了,之前小鹿也介绍了很多(请戳【情人节】R语言—小提琴图的浪漫邂逅)。今天,分享一个新型可视化图--云雨图,那先看下效果图感受下吧~

云雨图,顾名思义,像云和雨一样的图。由两个部分组成:上图像云,本质上是小提琴的一半;下图像雨,本质上是蜂窝图的一半,主要用于数据分布的展示。那这样的图如何绘制的?跟小编一起学习吧~


小试牛刀

今天,小编介绍两种方法绘制云雨图,让大家充分学习,并上手自己绘制。

第一种,用ggplot扩展包gghalves。以iris数据集为例:

# if (!require(devtools)) {install.packages(''devtools'')}# devtools::install_github(''erocoar/gghalves'')# 加载依赖包,如未安装,请先安装,如上代码。library(gghalves)library(tidyverse)
# Species因子化,后续作图需要iris$Species <- iris$Species %>% factor(.,levels=unique(.))head(iris)#   Sepal.Length Sepal.Width Petal.Length Petal.Width Species# 1          5.1         3.5          1.4         0.2  setosa# 2          4.9         3.0          1.4         0.2  setosa# 3          4.7         3.2          1.3         0.2  setosa# 4          4.6         3.1          1.5         0.2  setosa# 5          5.0         3.6          1.4         0.2  setosa# 6          5.4         3.9          1.7         0.4  setosa

向右滑动查看更多


绘制云雨图,需要用到gghalves的两个函数,geom_half_violin()geom_half_dotplot(),分别绘制“云”和“雨”。


# 先绘制小提琴的一半ggplot2::ggplot(iris , aes(x = Species, y = Sepal.Length, fill = Species))+              gghalves::geom_half_violin(aes(fill = Species),                                             position = position_nudge(x = .15, y = 0),                                             adjust=1.5, trim=FALSE,                                              colour=NA, side = ''r''                                             )

向右滑动查看更多

# 再绘制蜂窝图的部分ggplot2::ggplot(iris , aes(x = Species, y = Sepal.Length, fill = Species))+              gghalves::geom_half_violin(aes(fill = Species),                                             position = position_nudge(x = .15, y = 0),                                             adjust=1.5, trim=FALSE,                                              colour=NA, side = ''r'') +              gghalves::geom_half_dotplot(aes(fill = Species), method="histodot", stackdir="down",                                          dotsize = 0.55, position=position_nudge(x = .15, y = 0),                                          binwidth = 0.15, colour = NA                                          )

向右滑动查看更多

# 最后旋转坐标ggplot2::ggplot(iris , aes(x = Species, y = Sepal.Length, fill = Species))+              gghalves::geom_half_violin(aes(fill = Species),                                             position = position_nudge(x = .15, y = 0),                                             adjust=1.5, trim=FALSE,                                              colour=NA, side = ''r'') +              gghalves::geom_half_dotplot(aes(fill = Species), method="histodot", stackdir="down",                                          dotsize = 0.55, position=position_nudge(x = .15, y = 0),                                          binwidth = 0.15, colour = NA                                          ) +               ggplot2::coord_flip() +               ggthemes::theme_base()   # 换一个主题,符合科研风格。需安装ggthemes包

向右滑动查看更多


那么,这样就可得到前言例图啦,很简单有没有。

再介绍一种,更简单的。利用see包来绘制,包里有个函数geom_violindot(...),绘制云雨图一步到位。

# 安装see包# install.package("see")library(see)p <- ggplot2::ggplot(iris, aes(x = Species,                               y =Sepal.Length,                                fill = Species)) +                    see::geom_violindot(color = NA,                                #去除小提琴边框                                        dots_color = NA,                           #去除圆点边框                                        dots_size  = 0.5,                         #圆点大小                                        binwidth = 0.15,                           #窗口bin的宽度                                        scale="area",       #云图以“面积”来缩放,还有"count" or "width"                                        trim = F            #是否过滤头尾数据,默认为TRUE                                       ) +                    ggthemes::theme_base()+                #换主题                    ggplot2::coord_flip()+                 #旋转换坐标轴                    see::scale_fill_material()             #修改填充颜色

向右滑动查看更多

这样子的图,是不是有点云雨图的味道啦~~


小巧微琢

由于gghalvessee包都是ggplot的扩展包,返回的结果均为ggplot对象,这在对后续的图形优化、多图组合上,有很大的便利性。比如,我们需要做不同组数据之间的比较分析,那该怎么办呢?莫慌,使用ggsignif包的geom_signif()函数就能轻松搞定,如下:

# 安装ggsignif# install.packages("ggsignif")library(ggsignif)enhence_p <- p + ggsignif::geom_signif(comparisons = list(c("versicolor", "setosa"),                                            c("versicolor", "virginica"),                                            c("setosa", "virginica")),        # 设置比较组                y_position = c(8.0, 8.4, 8.8),                                # 设置显著性标志所在的y轴坐标                map_signif_level = c("***" = 0.001, "**" = 0.01, "*" = 0.05)) # 匹配显著性程度标识(星号*)print(enhence_p)

向右滑动查看更多

另外,多图拼接也是很方便,用到patchwork包来实现。这里将上述两图进行拼接。

## 安装patchwork# install.packages("patchwork")library(patchwork)multi_p <- p + see::theme_modern() & enhence_p + see::theme_modern() multi_p# 下面写法也可,并对分页有更多控制p1 <- p + see::theme_modern(); p2 <- enhence_p + see::theme_modern()list(p1, p2) %>% patchwork::wrap_plots(., ncol=2)

向右滑动查看更多

除此之外,我们可能需要进一步美化组合图,则需要对图形元素进行更多修改,如左图的legend有点多余,右图的Y轴坐标和坐标名也是多余的,这个时候就需要进行删除。解决方案就是可以利用ggplot2::theme()进行进一步精修,这里由于篇幅,不做展开了。如果各位看官老师需要了解,请在文末留言,后期还有更多大家想看的操作分享哦~


意犹未尽

前段时间,小编在做网红产品空间代谢组和空间转录组联合分析的研发工作时,需要展现切片样本全区域高表达代谢物的分布情况,正好也用到了云雨图,范例如下:

# 由于函数整合到sce对象中,仅展示最终代码crplot <- cloudrainplot(sce,                         # sce为SingleCellExperiment object or dataframe                       dots_color = ggplot2::alpha("grey50", 0),                        dots_size  = 1.5, binwidth = 20, scale="width"                      )crplot               


数据可视效果还是不错的哟!其实,数据比较大的时候,作出的图有点像山脉图,这个后期小鹿会继续分享的~~

好了,这期分享就到这里,下期再见!各位看官有什么想学习或了解的,数据分析、可视化或生信组学方向都后台留言我们哟~


文末看点 鹿明生物

上海鹿明生物科技有限公司多年来,一直专注于生命科学和生命技术领域,是国内早期开展以蛋白组和代谢组为基础的多层组学整合实验与分析的团队。

同时,鹿明生物线上学习平台易明学院也拥有众多生信教程,欢迎访问:https://www.yimingxueyuan.com/


猜你还想看


生信课程:这个R包不太冷系列五——降维分析

生信课程:这种图竟比条形图、箱线图和抖动图展现度更优?

生信课程:这个R包不太冷系列四:数据处理不可错过的dplyr

生信课程:手把手教你如何从iprox上自动批量下载原始数据

生信课程:这个分析不太难系列(一)——方差分析

生信课程:一行代码,轻松绘制动态关系网络图(Jaal 库)

生信课程:这个R包不太冷系列三:一种“简单代码+简单调整=即刻出图”的包

生信课程:我要如何才能拯救你!我的论文!我的实验数据!

云平台:奥利给~~代谢通路富集分析原来还可以这么做?

云平台:震惊!他花了3分钟就完成了我三个周的工作!

云平台:欧易/鹿明云 | 免费的聚类热图不试试吗?


END

段小前  撰文

欢迎转发到朋友圈

本文系鹿明生物原创

转载请注明本文转自鹿明生物

我知道你在看

点“阅读原文”了解更多


  • 客服电话: 400-6699-117 转 1000
  • 京ICP备07018254号
  • 电信与信息服务业务经营许可证:京ICP证110310号
  • 京公网安备1101085018
  • 客服电话: 400-6699-117 转 1000
  • 京ICP备07018254号
  • 电信与信息服务业务经营许可证:京ICP证110310号
  • 京公网安备1101085018

Copyright ©2007-2026 ANTPEDIA, All Rights Reserved