使用R中的基本图形绘制箱线图系列

使用R中的基本图形绘制箱线图系列,r,label,boxplot,R,Label,Boxplot,我想在一个图中绘制R中的多个箱线图,并将它们成对分组。我是R的初学者,虽然有几个线程处理同一主题(在R中有多个方框图),但我找不到一个全面的方法来解决这个问题。我只想在可能的情况下使用基本图形 我有10组值,它们都包含30个值(可以是任何正值)。在这10套中,5套为1型,另外5套为2型。我的目标是有十个箱线图(每组值一个),并在单个图形中将每组类型1与一组类型2分组。最后,我希望有5个数据集群,每个集群包含两个箱线图。我还希望每个集群(A、B、C、D、E)有一个x标签,并且类型1的数据为红色,类

我想在一个图中绘制R中的多个箱线图,并将它们成对分组。我是R的初学者,虽然有几个线程处理同一主题(在R中有多个方框图),但我找不到一个全面的方法来解决这个问题。我只想在可能的情况下使用基本图形

我有10组值,它们都包含30个值(可以是任何正值)。在这10套中,5套为1型,另外5套为2型。我的目标是有十个箱线图(每组值一个),并在单个图形中将每组类型1与一组类型2分组。最后,我希望有5个数据集群,每个集群包含两个箱线图。我还希望每个集群(A、B、C、D、E)有一个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)))

我获得了10个正确着色的箱线图,但我找不到一种方法将它们成对分组,也找不到正确的图例。有没有一种简单的方法可以做到这一点,或者我是否需要以不同的方式组织我的数据?如果是这样,感谢您指出了正确的方向。

您需要使用公式表示,最好是
rbind
所有这些数据帧,而不是
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"))
#示例数据

A1您需要使用公式表示,最好是
rbind
所有这些数据帧,而不是
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"))
#示例数据


A1您的数据帧是否具有相同的维度和列/变量名?我目前不使用任何数据帧。虽然我读了很多关于它们的书,但我不知道为什么我需要它们。类(A1)
的值是多少?您还没有关闭最后一组
”位于原始的
箱线图中。您还需要将
legend
调用作为自己的调用放在单独的行中。它与
box-plot
call没有直接关系谢谢我错过了你的数据帧有相同的维度和列/变量名吗?我现在不使用任何数据帧。虽然我读了很多关于它们的书,但我不知道为什么我需要它们。类(A1)
的值是多少?您还没有关闭最后一组
”位于原始的
箱线图中。您还需要将
legend
调用作为自己的调用放在单独的行中。它与箱线图没有直接关系谢谢我错过了这不是我要找的,事实上我已经用箱线图得到了类似的东西(A1,A2,B1,B2,C1,C2,D1,D2,E1,E2,names=c(“A1”,“A2”,“B1”,“B2”,“C1”,“C2”,“D1”,“D2”,“E1”,“E2”))
,但我想把A1和A2放在同一个标签“A”下并且有一个带有两种类型“类型1”和“类型2”的图例。另外,我不明白
data.frame(test=rnorm(100))是什么意思。@user204491-在您的示例中,当您执行
read.table
时,结果是一个
data.frame
。Thomas只是在重新创建您的数据,以便他有一个可以使用的示例。我建议你在某个地方读一个介绍网站,比如:让你的头脑了解一些细节。谢谢,现在看起来很像!感谢您解释read.table和data.frame之间的对应关系,是的,我肯定会阅读更多关于R的内容。我仍然有两个问题:为什么蓝色和红色方框图的顺序不总是相同?对于每一组箱线图,是否可能只有一个勾号?@Thomas-当使用公式-
箱线图时,不需要使用带
(test~group1,data=out…
就可以了。@user204491看一下我刚刚发布的编辑,它纠正了我之前代码re:color中的一个小错误。这不是我要找的,事实上我已经通过
箱线图(A1、A2、B1、B2、C1、C2、D1、D2、E1、E2,names=c(“A1”、“A2”、“B1”、“B1”、“B2”、“C1”、“C2”、“D1”、“D2”、“E1”、“E2”))获得了类似的结果。)
,但我想将A1和A2分组在同一个标签“A”下,并有一个带有两种类型“type 1”和“type 2”的图例。此外,我不明白data.frame(test=rnorm(100))是什么
意思。@user204491-在您的示例中,当您进行
读取.table
时,结果是一个
数据.frame
。Thomas正在重新创建您的数据,因此他有一个示例可供使用。我建议您在某个地方阅读一个介绍网站,如:让您的头脑了解一些细节。谢谢您现在的解释!谢谢read.table和data.frame之间的对应关系,是的,我肯定会读更多关于R的内容。我仍然有两个问题:为什么蓝色和红色的箱线图不总是以相同的顺序排列?对于每个箱线图簇,是否可能只有一个勾号?@Thomas-使用公式时,不必使用带
plot(test~group1,data=out…
就可以了。@user204491看一下我刚刚发布的编辑,它纠正了我先前代码re:color中的一个小错误。