百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

R绘制箱线图、小提琴图 | Shiny交互操作,不一样的体验!

bigegpt 2024-08-14 14:52 2 浏览

欢迎关注公众号:生信艺术家

网上的教程绘箱线图和小提琴图已经很多很详细了,ggplotbox和ggplot都可以,加上geom_violin()就成小提琴图了。那就主要分享一下通过R里的Shiny对箱线图的风格、线条、坐标轴调整达到出版的要求。交互式操作就是不需要输入代码,只需要鼠标点点就可以得到想要的结果。




一、简单介绍

1.什么是Shiny?


Shiny是一个搭建Web应用的R语言框架。简单来说,就是可以Shiny搭建一个网站。通过Shiny, 我们只需要掌握最基础的一些语法知识,而不必深入学习 HTML或者 JavaScript 。这就是 Shiny最大的便利之处。实际上我们也不用掌握Shiny,在R里面调整图像主题,是通过一个基于Shiny的R包ggThemeAssist来完成。

2. R包ggThemeAssist

ggThemeAssist横空出事,它依赖shiny (>= 0.13), miniUI (>= 0.1.1), rstudioapi (>= 0.5), ggplot2, formatR,可以对ggplot2图形结果直接修改,并实时预览效果,同时编辑结束返回代码。相当于一个帮你写代码的翻译官!

当运行ggThemeAssist(),就会看到打开了一个窗口,上部为图形预览窗口,下部有6个选项卡,分别对应各类主题细节的调整。之后将讲解具体参数。


3. 小提琴图和箱线图的区别

小提琴图和箱线图类似,用来显示数据分布和概率密度。结合了箱线图和密度图的特征,用来显示数据的分布形状。箱线图是长方形上线一样宽,无法反应数据在哪个值时分布较多,而小提琴图像水滴、葫芦状,胖的地方反映了数据密度高的地方。




二、数据准备

1.R包安装

install.packages("ggThemeAssist")library(ggThemeAssist)install.packages("shiny")library(shiny)library(ggplot2)
library(ggpubr)
library(reshape2)


2. 数据准备

一个类似于这样的excel文件或txt文件,把他读到R里数据框存储。

mydata=read.csv("E:/species_pdistance.csv",head=T)



三、实战操作

在R里,只要把需要R包安装好,数据读好(注意表头和列名),接下来画图只需要复制一行代码过来就行。麻烦的是一些细节,比赛坐标轴物种的顺序,差异分析时T检验,显著性分析,一些期刊要求的线条粗细,点的大小,透明度等等。这些都会在下面介绍到。

1.ggboxplot绘制箱图

ggboxplot(mydata,x="Species" ,y="Pdistance", color = "Species" ,
          bxp.errorbar = T, add="jitter",palette = "aaas",width = 0.7,size = 0.01,ylab = "P distance",xlab = NULL)+ theme(axis.line = element_line(size = 0.15),axis.text = element_text(size = 7))
# palette = "aaas"可以调整图像的配色风格

那么运行上面代码就得到这样的一张图



2.ggplot2绘制箱图

通过ggplot()+geom_boxploy()来画

ggplot(mydata,aes(x=Species,y=Pdistance,color = Species)) +     
  geom_boxplot(outlier.colour = "gray",outlier.size=0.7,outlier.alpha=0.7,size = 0.3)+ 
  scale_fill_brewer(palette="Pastel1")

运行代码


3. ggplot2绘制小提琴图

通过ggplot()+geom_violin()来画

ggplot(mydata,aes(Species,Pdistance), color = "Species")+
  geom_violin(aes(fill=Species),show.legend = F)+
  theme(panel.grid = element_blank(),
        panel.background = element_blank(),
        axis.line = element_line(),
        axis.text.x = element_text(angle=0,hjust = 0.5,vjust=0.5),
        plot.title = element_text(hjust=0.5))+ scale_fill_brewer(palette="Pastel1")

运行代码

这样三幅图就画完了,下面就是根据出版要求的细节调整了。就用小提琴图举例。


4. 在图像中显示每个数据点

通过这个geom_sina()来实现,需要先加载这个ggforce包。

library(ggforce)


ggplot(mydata,aes(Species,Pdistance), color = "Species")+
  geom_violin(aes(fill=Species),show.legend = F)+
  theme(panel.grid = element_blank(),
        panel.background = element_blank(),
        axis.line = element_line(),
        axis.text.x = element_text(angle=0,hjust = 0.5,vjust=0.5),
        plot.title = element_text(hjust=0.5))+ scale_fill_brewer(palette="Pastel1")+
  geom_sina(size=0.6,alpha=0.2)

5. 调整X轴物种顺序

通过scale_x_discrete(limits=c("S.nitens","X.riparia", "T.occipitalis","S.cancellata"))完成。

ggplot(mydata,aes(Species,Pdistance), color = "Species")+
  geom_violin(aes(fill=Species),show.legend = F)+
  theme(panel.grid = element_blank(),
        panel.background = element_blank(),
        axis.line = element_line(),
        axis.text.x = element_text(angle=0,hjust = 0.5,vjust=0.5),
        plot.title = element_text(hjust=0.5))+ scale_fill_brewer(palette="Pastel1")+
  geom_sina(size=0.8,alpha=0.5)+
  scale_x_discrete(limits=c("S.nitens","X.riparia", "T.occipitalis","S.cancellata"))

6.差异分析显著性检验T-test

通过这个stat_compare_means()来完成,需要注意的是这个参数不能和scale_x_discrete()一起使用。

ggplot(mydata,aes(Species,Pdistance), color = "Species")+
  geom_violin(aes(fill=Species),show.legend = F)+
  theme(panel.grid = element_blank(),
        panel.background = element_blank(),
        axis.line = element_line(),
        axis.text.x = element_text(angle=0,hjust = 0.5,vjust=0.5),
        plot.title = element_text(hjust=0.5))+ scale_fill_brewer(palette="Pastel1")+
  geom_sina(size=0.8,alpha=0.5)+
  stat_compare_means(label = "p.signif", method = "t.test",
                     ref.group = "S.cancellata")
# 每个组和S.cancellata进行差异分析

7. ggThemeAssist调整各项参数(线条粗细,点大小,透明度,标题等)

小提琴图实在太丑了就用箱线图来展示吧!

先画个箱线图,把图像存到a变量里,方便使用ggThemeAssistGadget()函数。

a=ggplot(mydata,aes(x=Species,y=Pdistance,color = Species)) +     
  geom_boxplot(outlier.colour = "gray",outlier.size=0.7,outlier.alpha=0.7,size = 0.3)+ 
  scale_fill_brewer(palette="Pastel1")

接下来就是见证奇迹的时刻了,输入ggThemeAssistGadget(a),就可看到一个交互式窗口。

ggThemeAssistGadget(a)

可以先进入第一个选项卡设置,调整图像的长宽。


接下来是第二个选项卡 Panel & Backgroud

比如说我背景不想要灰色,想调成透明,就在红色圈出的地方调整,调整后上面的图片也会跟着刷新。


第三个选项卡是坐标轴,可以调整坐标轴的字体大小,颜色,倾斜角度,坐标轴线的粗细,颜色等。




第四个选项卡是标题与标签,可以添加图片的名称,字体大小,颜色。比如说添加标题。


第五个选项卡是图例,可以调整Position:位置,可选无none,左left,右right,上top,下buttom,Direction:方向,可按水平horizontal,或垂直vertical排列。比如说我想把图例跳到下面并水平排列。


第6个选项卡是子标题和图注。可以修改子标题(Subtitle)和图注(Caption)中的内容。同时可修改文字的属性,如字体家族、样式、大小、颜色和水平位置。比如说添加个子标题。


以上面板中可修改上百个参数,并提供几百个属性值的选择。这些要是靠自己记住,那可真是太难了。此包为R语言绘图的细节调提供了极大帮助。

而且调好的样式,点击done完成,马上写书规范的代码就写好了,方便可重复计算和进一步修改。这就是代码的强大之处。

可以看一下点done后的效果

他会自动生成一个代码给你,包含所有你调整的参数。


8. 进阶的箱线图。

比如你的数据类型是这样的。

在做箱图时,先对一个物种里面的数据分一个组,上图就可以先按长度分一个区间。

ggplot(allsp_P ,aes(x=factor(range,levels =c("range500", "range1000", "", "rang2000", "range4000", "range10000")),y=Pdistance,fill =factor(species,levels =c('G.bimaculatus','T.ooria ','S.nitens','S.americana','S.serialis'))
 )) +     
  geom_boxplot(outlier.colour = "gray",outlier.size=0.7,outlier.alpha=0.7,size = 0.3)+ 
  scale_fill_brewer(palette="Pastel1")+
  stat_compare_means(label = "p.signif", method = "t.test",
                     ref.group = "")+theme_bw() +labs(y = "P distance")+  theme(panel.grid=element_blank())



这样就可以得到这样的图了


以上就是所有箱线图和小提琴图的参数了。是不是点点鼠标就能完成,不用写代码的感觉真好?






以上内容仅为个人总结,如有错误之处敬请批评!

联系我们:

190891968@qq.com




点击下方即可关注我们!


相关推荐

了解Linux目录,那你就了解了一半的Linux系统

大到公司或者社群再小到个人要利用Linux来开发产品的人实在是多如牛毛,每个人都用自己的标准来配置文件或者设置目录,那么未来的Linux则就是一团乱麻,也对管理造成许多麻烦。后来,就有所谓的FHS(F...

Linux命令,这些操作要注意!(linux命令?)

刚玩Linux的人总觉得自己在演黑客电影,直到手滑输错命令把公司服务器删库,这才发现命令行根本不是随便乱用的,而是“生死簿”。今天直接上干货,告诉你哪些命令用好了封神!喜欢的一键三连,谢谢观众老爷!!...

Linux 命令速查手册:这 30 个高频指令,拯救 90% 的运维小白!

在Linux系统的世界里,命令行是强大的武器。对于运维小白而言,掌握一些高频使用的Linux命令,能极大提升工作效率,轻松应对各种系统管理任务。今天,就为大家奉上精心整理的30个Linu...

linux必学的60个命令(linux必学的20个命令)

以下是Linux必学的20个基础命令:1.cd:切换目录2.ls:列出文件和目录3.mkdir:创建目录4.rm:删除文件或目录5.cp:复制文件或目录6.mv:移动/重命名文件或目录7....

提高工作效率的--Linux常用命令,能够决解95%以上的问题

点击上方关注,第一时间接受干货转发,点赞,收藏,不如一次关注评论区第一条注意查看回复:Linux命令获取linux常用命令大全pdf+Linux命令行大全pdf为什么要学习Linux命令?1、因为Li...

15 个实用 Linux 命令(linux命令用法及举例)

Linux命令行是系统管理员、开发者和技术爱好者的强大工具。掌握实用命令不仅能提高效率,还能解锁Linux系统的无限潜力,本文将深入介绍15个实用Linux命令。ls-列出目录内容l...

Linux 常用命令集合(linux常用命令全集)

系统信息arch显示机器的处理器架构(1)uname-m显示机器的处理器架构(2)uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件-(SMBIOS/DM...

Linux的常用命令就是记不住,怎么办?

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux常用文件操作命令(linux常用文件操作命令有哪些)

ls命令在Linux维护工作中,经常使用ls这个命令,这是最基本的命令,来写几条常用的ls命令。先来查看一下使用的ls版本#ls--versionls(GNUcoreutils)8.4...

Linux 常用命令(linux常用命令)

日志排查类操作命令查看日志cat/var/log/messages、tail-fxxx.log搜索关键词grep"error"xxx.log多条件过滤`grep-E&#...

简单粗暴收藏版:Linux常用命令大汇总

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部下午好,我的网工朋友在Linux系统中,命令行界面(CLI)是管理员和开发人员最常用的工具之一。通过命令行,用户可...

「Linux」linux常用基本命令(linux常用基本命令和用法)

Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们。总结送免费学习资料(包含视频、技术学习路线图谱、文档等)1、显示日期的指令:d...

Linux的常用命令就是记不住,怎么办?于是推出了这套教程

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux的30个常用命令汇总,运维大神必掌握技能!

以下是Linux系统中最常用的30个命令,精简版覆盖日常操作核心需求,适合快速掌握:一、文件/目录操作1.`ls`-列出目录内容`ls-l`(详细信息)|`ls-a`(显示隐藏文件)...

Linux/Unix 系统中非常常用的命令

Linux/Unix系统中非常常用的命令,它们是进行文件操作、文本处理、权限管理等任务的基础。下面是对这些命令的简要说明:**文件操作类:*****`ls`(list):**列出目录内容,显...