前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >R语言实现beanplot

R语言实现beanplot

作者头像
一粒沙
发布2020-03-31 17:00:44
发布2020-03-31 17:00:44
2.1K00
代码可运行
举报
文章被收录于专栏:R语言交流中心R语言交流中心
运行总次数:0
代码可运行

箱线图还有密度图大家应该都很熟悉,那么结合起来的是什么样呢,我们今天给大家介绍一个包beanplot(豆荚图)。下面我们看下包的安装:

代码语言:javascript
代码运行次数:0
运行
复制
install.packages("beanplot")

其中主要的函数是beanplot,其函数构成如下:

其中主要的参数:

Kernel 主要是指数据分布形式,主要包括"gaussian", "rectangular","triangular", "epanechnikov", "biweight","cosine" 和"optcosine",默认值是 "gaussian"。

Col是指的颜色的设置。其是包括四个值的向量:bean的面积(没有边框,使用边框表示该颜色)、bean内部的线条、bean外部的线条和每个bean的平均线条。

Overallline 总体数据的线的值,可以是mean或者median。

Beanlines 每一个bean的中线的数值,mean(默认),median,quantiles。

Beanlinewd bean中线的宽度。

What 由四个布尔值组成的向量,描述要绘制的内容。按照以下顺序,这些布尔值代表总平均线、豆子线、豆子平均线和豆线。例如,what=c(0,0,0,1)生成一个条形图。

Side 指的bean的形状。包括"first", "second" 和"both"。默认是“no”。

我们直接看一个简单的例子:

代码语言:javascript
代码运行次数:0
运行
复制
beanplot(rnorm(22),rnorm(22),rnorm(22),main="Test!",rnorm(3))

接下来,我们看下boxplot和beanplot的区别:

代码语言:javascript
代码运行次数:0
运行
复制
par(mfrow = c(1,2))
boxplot(count ~ spray, data = InsectSprays,col = "lightgray")
beanplot(count ~ spray, data =InsectSprays, col = "lightgray", border = "grey", cutmin =0)

对数据进行log处理,并设置相应的ylim:

代码语言:javascript
代码运行次数:0
运行
复制
par(mfrow = c(1,2))
boxplot(decrease ~ treatment, data =OrchardSprays,
       log = "y", col = "bisque", ylim = c(1,200))
beanplot(decrease ~ treatment, data =OrchardSprays,
       col = "bisque", ylim = c(1,200))

接下来我们看下多组数据进行绘制,需要用到参数add=T和side进行设置。我们直接看下实例:

代码语言:javascript
代码运行次数:0
运行
复制
par(mfrow = c(1,2))
boxplot(len ~ dose, data = ToothGrowth,
       boxwex = 0.25, at = 1:3 - 0.2,
       subset = supp == "VC", col = "yellow",
       main = "Guinea Pigs' Tooth Growth",
       xlab = "Vitamin C dose mg",
       ylab = "tooth length", ylim = c(-1, 40), yaxs = "i")
boxplot(len ~ dose, data = ToothGrowth, add= TRUE,
       boxwex = 0.25, at = 1:3 + 0.2,
       subset = supp == "OJ", col = "orange")
legend("bottomright",bty="n", c("Ascorbic acid", "Orange juice"),
      fill = c("yellow", "orange"))
allplot <- beanplot(len ~ dose+supp,data = ToothGrowth,
   what=c(TRUE,FALSE,FALSE,FALSE),show.names=FALSE,ylim=c(-1,40), yaxs ="i")
beanplot(len ~ dose, data = ToothGrowth,add=TRUE,
       boxwex = 0.6, at = 1:3*2 - 0.9,
       subset = supp == "VC", col ="yellow",border="yellow2",
       main = "Guinea Pigs' Tooth Growth",
       xlab = "Vitamin C dose mg",
       ylab = "tooth length", ylim = c(3, 40), yaxs = "i",
       bw = allplot$bw, wd = allplot$wd, what = c(FALSE,TRUE,TRUE,TRUE))
beanplot(len ~ dose, data = ToothGrowth, add= TRUE,
       boxwex = 0.6, at = 1:3*2-0.1,
       subset = supp == "OJ", col ="orange",border="darkorange",
       bw = allplot$bw, wd = allplot$wd, what = c(FALSE,TRUE,TRUE,TRUE))
legend("bottomright",bty="n", c("Ascorbic acid", "Orange juice"),
      fill = c("yellow", "orange"))

那么我们如何对每个bean合并起来绘制,需要设置col为一个list。并且包括两种颜色。我们看下实例:

代码语言:javascript
代码运行次数:0
运行
复制
par(mfrow = c(1,2))
boxplot(len ~ dose, data = ToothGrowth,
       boxwex = 0.25, at = 1:3 - 0.2,
       subset = supp == "VC", col = "yellow",
       main = "Guinea Pigs' Tooth Growth",
       xlab = "Vitamin C dose mg",
       ylab = "tooth length", ylim = c(-1, 40), yaxs = "i")
boxplot(len ~ dose, data = ToothGrowth, add= TRUE,
       boxwex = 0.25, at = 1:3 + 0.2,
       subset = supp == "OJ", col = "orange")
legend("bottomright",bty="n",c("Ascorbic acid", "Orange juice"),
      fill = c("yellow", "orange"))
 
beanplot(len ~ reorder(supp, len, mean) *dose, ToothGrowth,
       side = "b", col = list("yellow","orange"), border = c("yellow2",
           "darkorange"), main = "Guinea Pigs' Tooth Growth",
       xlab = "Vitamin C dose mg", ylab = "tooth length",ylim = c(-1,
           40), yaxs = "i")
legend("bottomright",bty="n",c("Ascorbic acid", "Orange juice"),
      fill = c("yellow", "orange"))

最后我们看一下benplot的更高级应用,那就是变量之间关系的绘制:

最后我们总结下,beanplot图的构造:

欢迎大家互相学习交流!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言交流中心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档