簡體   English   中英

使用R中的基本圖形繪制一系列箱形圖

[英]Plot series of boxplots using base graphics in R

我想在單個圖中繪制R中的多個箱形圖,然后將它們成對分組。 我是R的初學者,盡管有多個線程處理同一個主題( R中有多個箱形圖),但我找不到解決此問題的全面方法。 我只想在可能的情況下使用基本圖形。

我有10組值,它們全部包含30個值(可以是任何正值)。 在這10個集合中,有5個屬於類型1,其他5個屬於類型2。我的目標是在單個圖形中具有十個箱形圖(每組值一個)並將每個類型1的集合與一組類型2進行分組。 。 最后,我希望有5個數據簇,每個簇包含兩個箱形圖。 我還希望每個群集(A,B,C,D,E)具有1個x標簽,並且紅色的類型1的數據和綠色的類型2的數據。

到目前為止,我的代碼是:

A1data <- read.table("A1data.csv",header=TRUE,sep=";")
B1data <- read.table("B1data.csv",header=TRUE,sep=";")
C1data <- read.table("C1data.csv",header=TRUE,sep=";") 
D1data <- read.table("D1data.csv",header=TRUE,sep=";")
E1data <- read.table("E1data.csv",header=TRUE,sep=";")
A2data <- read.table("A2data.csv",header=TRUE,sep=";")
B2data <- read.table("B2data.csv",header=TRUE,sep=";")
C2data <- read.table("C2data.csv",header=TRUE,sep=";")
D2data <- read.table("D2data.csv",header=TRUE,sep=";")
E2data <- read.table("E2data.csv",header=TRUE,sep=";")

A1 <- 100*(A1data$x-A1data$y)/A1data$x
B1 <- 100*(B1data$x-B1data$y)/B1data$x
C1 <- 100*(C1data$x-C1data$y)/C1data$x
D1 <- 100*(D1data$x-D1data$y)/D1data$x
E1 <- 100*(E1data$x-E1data$y)/E1data$x
A2 <- 100*(A2data$x-A2data$y)/A1data$x
B2 <- 100*(B2data$x-B2data$y)/B1data$x
C2 <- 100*(C2data$x-C2data$y)/C1data$x
D2 <- 100*(D2data$x-D2data$y)/D1data$x
E2 <- 100*(E2data$x-E2data$y)/E1data$x

A <- cbind(A1,A2)
B <- cbind(B1,B2)
C <- cbind(C1,C2)
D <- cbind(D1,D2)
E <- cbind(E1,E2)

test <- cbind(A,B,C,D,E)
boxplot(test,col=c(2,3),legend(1000,10,c("type 1","type 2)))

產生錯誤“ strwidth(legend,units =“ user”,cex = cex,font = text.font)錯誤:plot.new尚未被調用”。 但是,如果我將最后一行更改為:

boxplot(test,col=c(2,3))

我獲得了10個正確着色的箱形圖,但是我找不到將它們成對分組或放置正確圖例的方法。 有沒有簡單的方法可以做到這一點,或者我需要以不同的方式組織數據? 如果是這樣,謝謝您指出正確的方向。

您需要使用公式表示形式,最好是rbind所有這些數據cbind而不是cbind

# sample data
A1 <- rnorm(100,1)
B1 <- rnorm(100,2)
C1 <- rnorm(100,3)
D1 <- rnorm(100,4)
E1 <- rnorm(100,5)
A2 <- rnorm(100,3)
B2 <- rnorm(100,4)
C2 <- rnorm(100,5)
D2 <- rnorm(100,6)
E2 <- rnorm(100,7)

dflist <- list(A1=A1,B1=B1,C1=C1,D1=D1,E1=E1,A2=A2,B2=B2,C2=C2,D2=D2,E2=E2)
out <- data.frame(test=do.call(c,dflist))
out$group1 <- rep(1:10,times=sapply(dflist,function(x) length(x)))

# plot
boxplot(test~group1, data=out, at = c(seq(1,13,by=3),seq(2,14,by=3)),
    names=NA, col=rep(c("red","blue"),each=5))
axis(1,at=seq(1.5,13.5,by=3),labels=LETTERS[1:5])
legend(x=1, y=9, legend=c("Type 1","Type 2"), fill=c("red","blue"))

結果:

在此處輸入圖片說明

暫無
暫無

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

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