簡體   English   中英

使用公式且未繪制異常值時,R中的構面/單獨的箱形圖? (ggplot2或R基礎)

[英]Facet/separate boxplots in R when formula is used and outliers are not drawn? (ggplot2 or r basics)

我有一個稱為samples_type的數據框:

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

“狀態”列可以采用兩個值:PAT或CON。 “變量”列可以采用許多值: SPP1,CCL24,ENG56 ...

我想對Status:variable的每個組合進行值的箱形圖繪制。

目前,我有兩個代碼:

boxplot(value ~ Status:variable, data=samples_type,
col=c("red", "limegreen"), las=2, outline=F)

和:

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刪除離群值,但發現了僅一個boxplot而不是多個boxplot的答案。 我不知道該怎么做...

編輯:每個代碼的箱線圖

帶第一個代碼的箱線圖 帶第二個代碼的箱線圖

一般

由於您沒有提供最小的數據集,因此很難提供幫助,因此我不得不退回到現有的數據上。

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函數分別生成每個圖:

## 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

對於第二個問題,您可以先通過

geom_boxplot(aes(fill = Status), outlier.shape = NA)

然后根據您的數據通過ylim調整y范圍。

注意 從技術上講, outlier.shape = NA如果您使用超出范圍的ylim點,則無論如何都將刪除掉outlier.shape = NA ,但是它會使代碼更加冗長,以顯示您想要做什么。

內置數據集示例

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

感謝@thothal,我發布了有效的最終代碼:

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))

軟件包“ purrr”中的“ iwalk”。

要記住,數據框的頭部samples_type

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

“狀態”列可以采用兩個值:PAT或CON。 “變量”列可以采用許多值:SPP1,CCL24,ENG56 ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM