首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用公式和不绘制离群点时,R中的小面/分开的方格图?(ggplot2或r基础)

当使用公式和不绘制离群点时,R中的小面/分开的方格图?(ggplot2或r基础)
EN

Stack Overflow用户
提问于 2019-04-09 08:58:45
回答 2查看 1K关注 0票数 0

我有一个类似于samples_type的数据框架

代码语言:javascript
复制
Status   variable        value
PAT       SPP1        1,994629e+00
PAT       SPP1        1,179033e+00
PAT       SPP1        2,901539e+00
PAT       SPP1        1,140857e+00
PAT       SPP1        1,467056e+00
PAT       SPP1        2,579037e+00

"Status“列可以采用两个值: PAT或CON。“变量”列可以接受许多值: SPP1、CCL24、ENG56 .

我想为Status:variable的每一个组合制作值的盒形图。

目前我有两个密码:

代码语言:javascript
复制
boxplot(value ~ Status:variable, data=samples_type,
col=c("red", "limegreen"), las=2, outline=F)

以及:

代码语言:javascript
复制
p0 <- ggplot(data = samples_J0_type, aes(x=variable, y=value)) +
geom_boxplot(aes(fill=Status)) +
facet_wrap( ~ variable, scales="free")

第一个代码给出了一个图中所有的盒子图,没有异常值。我想将它们分开,因为par(mfrow=c(.,.)将这样做。,我该怎么做?

对于第二段代码,我使用了ggplot2。我成功地分离了的盒图,但正如您所看到的,没有删除异常值,而且由于异常值的存在,我的盒图太小了。如何删除异常值?--我查过StackOverFlow --如何用ggplot2删除异常值--我只找到了一个盒子图的答案,但没有找到多个盒子图的答案。我不知道该怎么做.

编辑:每个代码的盒形图

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-09 09:09:19

General

帮助有点困难,因为您没有提供最小的数据集,所以我必须回到现有的数据。

代码语言:javascript
复制
mt <- mtcars %>% select(cyl, mpg, am)
## add some outliers
mt <- rbind(mt, data.frame(cyl = c(4, 6, 8), mpg = rep(100, 3), am = 0))

碱基R

您可以根据变量之一拆分数据,相应地设置mfrow并使用apply函数分别生成每个图:

代码语言:javascript
复制
## split your data according to one variable
dl <- split(mt, mt$am)

## set the mfrow
par(mfrow = 1:2)
## something more educated would be something like this
## needs to be adapted for border cases
## par(mfrow = c(ceiling(sqrt(length(dl))), ceiling(sqrt(length(dl)))))

## loop through all data sets
lapply(dl, function(d) boxplot(mpg ~ cyl, data = d, outline = FALSE))

然而,boxplot(. outliers = TRUE)并没有真正移除你的离群点,而是扩展你的胡须。

ggplot

对于你的第二个问题,你可以先通过

代码语言:javascript
复制
geom_boxplot(aes(fill = Status), outlier.shape = NA)

然后根据你的数据通过ylim调整y-范围.

请注意。从技术上讲,您不需要使用outlier.shape = NA,因为如果您使用超出范围的ylim点将被删除,但是它会使代码更加冗长,以显示您想要做的事情。

具有内置数据集的示例

代码语言:javascript
复制
library(tidyverse)

## plot w/ outliers shown
ggplot(mt, aes(x = factor(cyl), y = mpg)) + 
   geom_boxplot() + 
   facet_wrap(~am)

## plot with outliers removed
ggplot(mt, aes(x = factor(cyl), y = mpg)) + 
   geom_boxplot(outlier.shape = NA) + 
   facet_wrap(~am) + 
   ylim(c(0, 50))

警告

在您的更新中,您添加了情节,我看到您有免费的扩展,这将使这种方法毫无用处,因为您不能在每个面板的基础上指定ylim

票数 3
EN

Stack Overflow用户

发布于 2019-04-09 14:05:56

感谢@thothal,我发布了最终代码:

代码语言:javascript
复制
dl = split(samples_type, samples_type$variable)
par(mfrow = c(ceiling(sqrt(length(dl))),ceiling(sqrt(length(dl)))))
iwalk(dl, ~ boxplot(value ~ Status , data = .x,
      outline = FALSE,col=c("red", "limegreen"), main=.y))

"iwalk“来自包裹"purrr”。

要记住,数据帧samples_type的负责人

代码语言:javascript
复制
Status   variable        value
PAT       SPP1        1,994629e+00
PAT       SPP1        1,179033e+00
PAT       SPP1        2,901539e+00
PAT       SPP1        1,140857e+00
PAT       SPP1        1,467056e+00
PAT       SPP1        2,579037e+00

"Status“列可以采用两个值: PAT或CON。“变量”列可以接受许多值: SPP1、CCL24、ENG56 .

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55588869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档