ggplot2箱式图两两比较_R绘图 第四篇:绘制箱图(ggplot2)

箱线图通过绘制观测数据的五数总括,即最小值、下四分位数、中位数、上四分位数以及最大值,描述了变量值的分布情况。箱线图能够显示出离群点(outlier),离群点也叫做异常值,通过箱线图能够很容易识别出数据中的异常值。

箱线图提供了识别异常值的一个标准:

异常值通常被定义为小于 QL- l.5 IQR 或者 大于 Qu+ 1.5 IQR的值,QL称为下四分位数, Qu称为上四分位数,IQR称为四分位数间距,是Qu上四分位数和QL下四分位数之差,其间包括了全部观察值的一半。

箱线图的各个组成部分的名称及其位置如下图所示:

箱线图可以直观地看出数据集的以下重要性值:

中心位置:中位数所在的位置就是数据集的中心;

散布程度:箱线图分为多个区间,区间较短时,表示落在该区间的点较集中;

对称性:如果中位数位于箱子的中间位置,那么数据分布较为对称;如果极值离中位数的距离较大,那么表示数据分布倾斜

一,绘制箱线图

绘制箱线图比较简单,通常情况下,我们使用ggplot和geom_boxplot绘制箱线图,在下面的小节中,我们使用ToothGrowth作为示例数据:

ToothGrowth$dose

head(ToothGrowth)

len supp dose1 4.2 VC 0.5

2 11.5 VC 0.5

3 7.3 VC 0.5

4 5.8 VC 0.5

5 6.4 VC 0.5

6 10.0 VC 0.5

1,绘制基本的箱线图

使用geom_boxplot绘制基本的箱线图:

library(ggplot2)

ggplot(ToothGrowth, aes(x=dose, y=len)) +geom_boxplot()

2,设置离群点(outlier)

geom_boxplot函数中有outlier开头的多个参数,用于修改离群点的属性:

outlier.colour:离群点的颜色

outlier.fill:离群点的填充色

outlier.shape:离群点的形状

outlier.size:离群点的大小

outlier.alpha:离群点的透明度

示例代码如下:

ggplot(ToothGrowth, aes(x=dose, y=len)) +geom_boxplot(outlier.colour="red", outlier.shape=8, outlier.size=4)

3,设置箱线图的颜色

通过aes(color=)函数可以为每个箱线图设置一个颜色,而箱线图的划分是通过 aes(color=)函数的color参数来划分的,划分箱线图之后,scale_color_*()函数才会起作用,该函数用于为每个箱线图设置前景色和填充色,颜色是自定义的:

scale_fill_manual() #forbox plot, bar plot, violin plot, etc

scale_color_manual() #for lines and points

以下代码设置箱线图的前景色:

ggplot(ToothGrowth, aes(x=dose, y=len,color=dose)) +geom_boxplot()+scale_color_manual(values=c("#999999", "#E69F00", "#56B4E9"))

4,设置Legend 的位置

说明(Legend)是对箱线图的解释性描述,默认的位置是在画布的右侧中间位置,可以通过theme()函数修改Legend的位置,lengend.position的有效值是top、right、left、bottom和none,默认值是right:

p

p+ theme(legend.position="top")

p+ theme(legend.position="bottom")

p+ theme(legend.position="none") # Remove legend

5,设置箱线图的标题和坐标轴的名称

通过labs设置箱线图的标题和坐标的名称,参数title用于设置标题,x和y用于设置x轴和y轴的标签:

ggplot(ToothGrowth, aes(x=dose, y=len,color=dose)) +geom_boxplot()+scale_color_manual(values=c("#999999", "#E69F00", "#56B4E9"))+theme(legend.position="right")+labs(title="Plot of length per dose",x="Dose (mg)", y = "Length")

6,绘制箱线图的散点

通过geom_point函数,向箱线图中添加点,geom_jitter()函数是geom_point(position = "jitter")的包装,binaxis="y"是指沿着y轴进行分箱:

# Box plot with dot plot

p+ geom_dotplot(binaxis='y', stackdir='center', dotsize=1)

# Box plot with jittered points

#0.2 : degree of jitter inx direction

p+ geom_jitter(shape=16, position=position_jitter(0.2))

7,旋转箱线图

函数coord_flip()用于翻转笛卡尔坐标系,使水平变为垂直,垂直变为水平,主要用于把显示y条件x的geoms和统计信息转换为x条件y。

p

二,异常值检测

绘制散点图,并标记异常值:

ggplot(ToothGrowth, aes(x=dose, y=len,color=dose)) +geom_boxplot(outlier.colour="red", outlier.shape=7,outlier.size=4)+scale_color_manual(values=c("#999999", "#E69F00", "#56B4E9"))+theme(legend.position="right")+labs(title="Plot of length per dose",x="Dose (mg)", y = "Length")+geom_dotplot(binaxis='y', stackdir='center', stackratio=1.5, dotsize=1.2)

当箱线图中的异常值过多时,绘制的图中,箱子被压成一条线,无法观察到数据的分布,这就需要移除异常值,只保留适量的离群点,常见的做法是改变ylim的范围,代码是:

# compute lower and upper whiskers

ylim1= boxplot.stats(df$y)$stats[c(1, 5)]

# scale y limits based on ylim1

ggplot()+ gemo_box() + coord_cartesian(ylim = ylim1*1.05)

三,箱图的排序

对箱图的排序,实际上,是对箱图的x轴因子进行排序,而因子的顺序是由因子水平决定的。在对箱图进行排序时,可以按照数据的均值对x轴因子水平进行排序,重置数据框x轴的因子水平,就可以实现箱图的排序:

x_order %group_by(x_factor)%>%summarize(mean_y=mean(y_value))%>%ungroup()%>%arrange(desc(mean_y))%>%

select(x_factor);

df$x_factor

参考文档:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542214.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统中用户的管理

#####用户管理###### 1在Linux中,有三种用户: 1 root : 也成为超级用户,对系统有控制权限,超级用户可以不受限制的运行任何命令,root 用户可以看作是系统的管理员。 2 系统用户: 系统用户通常为系统功能所必…

c# 命名空间命名规范_C#命名空间能力问题和解答 套装3

c# 命名空间命名规范1) There are following namespaces are given below, which is correct about "using" statement in C#.NET? In C#.Net, "using" statement is used to import the namespace in our programWe can create a new namespace with the…

shell 查出文件并复制到另一个文件夹

找出所有大于100M的文件并展示出来find / -size 100M -exec ls -lh {} \;找出特定文件内大于200字节的文件并备份到另一个文件夹里去find /opt/test -type f -size 200c -exec cp {} /opt/test/cp/ \;转载于:https://blog.51cto.com/406647516/1875417

correl函数相关系数大小意义_用Correl函数返回相关系数,以确定属性关系

我们辛辛苦苦制作了表格,当然是要作出分析的,肯定不能就是这么几个数据吧。常用的分析法都是图表,虽然看起来直观,但是对于非作者来说,理解意思显然不是那么方便。下面,教大家使用函数,来算出相…

Java之类的构造器(反射)

反射: Java反射机制:指的是在Java程序运行状态中,对于任何一个类,都可以获得这个类的所有属性和方法;对于给定的一个对象,都能够调用它的任意一个属性和方法。这种动态获取类的内容以及动态调用对象的方法称为反射机制。Java的反射机制允许在对类未知的情…

java 系统自动检测_如何在Java中检测OS(操作系统)名称?

java 系统自动检测To detect the OS (operating system) name in Java, we use the getProperties() method, which is defined in System class, while calling the method, we need to pass the property name to get the OS (operating system name). 要检测Java中的OS(操作…

shell中返回值是1为真还是假_shell脚本中判断上一个命令是否执行成功

SQL Server 系列文章快速导航(SWF版)一.前言 在博客园写博客不自不觉已经有5个年头了,一开始只是为了记录工作中遇到的问题和解决办法,后来写的文章不自不觉的侧重在SQL Server方面的技术文章,在2014年1月终于鼓起勇气申请了微软S ...duilib帮助1.窗口基类:见介绍 顺便贴下出来…

Linux中对进程的管理

1.what is 进程 程序(program)放置在储存媒体中(如硬盘、光盘、软盘、磁盘等),为实体的型态存在。 进程:程序被触发后,执行者的权限与属性、程序的程序码与所需数据等都会被载入内存中&#xff…

带C#示例的String.Equality(==)运算符

C#String.Equality运算符 (C# String.Equality operator ) "" is a String.Equality operator in C#, it is used to check whether two strings objects have the same values or not. “ ”是C#中的String.Equality运算符 ,用于检…

jQuery 倒计时

function getSec(){//获取名称为remindataSec的ulobj document.getElementsByName("remindataSec");for(i0;i<obj.length;i){//循环得到每个毫秒数var intDiff $("#remindataTime"i"").text();var id "reminTime"i;//得到毫秒数…

Linux远程连接与sshd服务安全设定

1.远程连接&#xff1a; 首先设置ip&#xff1a; 设置好之后&#xff0c;先ping一下IP 看能不能通 ssh root172.25.13.103 ##表示的是&#xff1a;连接ip为172.25.13.103的root用户 2.系统控制命令 系统控制命令的查看相关参数如下表 systemctl服务控制命令systemctl stat…

rabbitmq 同步策略_RabbitMQ高可用方案总结

RabbitMQ的集群方案有以下几种&#xff1a;1.普通的集群exchange&#xff0c;buindling再所有的节点上都会保存一份&#xff0c;但是queue只会存储在其中的一个节点上&#xff0c;但是所有的节点都会存储一份queue的meta信息。因为这样有两个好处&#xff1a;1)存储空间。如果每…

一个简单的封ip规则

2019独角兽企业重金招聘Python工程师标准>>> 一个简单通过nginx日志封ip规则&#xff08;仅仅自己方便使用&#xff09; #!/bin/bash #Version:1.0 #Date:2016-08-09 #作用:防刷IP地址,解封蜘蛛,解封5天前封的IP地址function deny () { Date$(date "%F-%H-%M&q…

c程序预处理器的设计与实现_C预处理器-能力问题与解答

c程序预处理器的设计与实现C programming Pre-processor Aptitude Questions and Answers: In this section you will find C Aptitude Questions and Answers on Pre-processor topics like #define, #undef, #if, #endif etc. C编程预处理程序能力问题和解答&#xff1a;在本…

系统日志管理

1 查看系统中的日志 rsyslog 此服务是用来采集系统日志的&#xff0c;他不产生日志&#xff0c;只是起到采集作用 2 rsyslog 的管理 /var/log/messages服务信息日志/var/log/secuer系统登陆日志/var/log/cron定时任务日志/var/log/maillog邮件日志/var/log/boot.log系统启动日…

pythonassertbug_还在 Bug 不断?不妨试试这 2 个装X技巧

原标题&#xff1a;还在 Bug 不断&#xff1f;不妨试试这 2 个装X技巧作者 | luanhz来源 | 小数志(ID&#xff1a;Datazhi)程序员每天遇到 bug 就像喝水吃饭一样稀松平常&#xff0c;关键在于怎么高效而不失优雅的面对这些 bug&#xff01;所以&#xff0c;你还在固执的使用 tr…

iOS10 UI教程视图的边界与视图的框架

2019独角兽企业重金招聘Python工程师标准>>> iOS10 UI教程视图的边界与视图的框架 iOS10 UI视图的边界 在视图的几何形状中我们提到了视图属性中的一部分属性可以将定义的视图绘制在屏幕上。其中典型的3个属性为边界属性、框架属性以及中心位置属性。 bounds表示的就…

Java System类runFinalization()方法及示例

系统类runFinalization()方法 (System class runFinalization() method) runFinalization() method is available in java.lang package. runFinalization()方法在java.lang包中可用。 runFinalization() method is used to run the finalize() methods of any object that are…

Linux中远程文件的传输

1. scp命令 scp file userip:/dir 把自己主机的文件远程复制到其他主机 scp userip:/file dir 把其他主机的文件远程复制到当前主机 注意&#xff1a;要关闭接受端的防火墙 把主机的file远程复制到IP为172.25.254.117的root用户的Desktop 把IP为172.25.254.117的root用户Deskt…

svn: Can't convert string from 'UTF-8' to native

详见&#xff1a;http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt227 svn 版本库中有文件是以中文字符命名的&#xff0c;在 Linux 下 checkout 会报错&#xff1a; svn: Cant convert string from UTF-8 to native encoding 然后 checkout 程序就退出了&#xff…