同一图表上的两个箱图

时间:2016-06-08 05:51:23

标签: r ggplot2 boxplot

我有两个不同的数据集,具有不同的观察数量。我想在同一个图表上绘制两个箱图,以便更容易进行比较。我可以绘制一个箱形图,但如果没有它们,就很难发现任何差异。

我有一些假数据。

Group A
V1    V2   V3    V4     V5
6.5   2    11    0.5    6
7     1    8     0.34   8
5.4   4    7.8   0.45   5
3.4   6    9.1   0.72   5

Group B
V1    V2   V3    V4     V5
5.0   5    9     0.4    7
2     7    5.2   0.69   5
3.2   2    2.9   0.79   2
6.8   9    6.5   0.43   6
4.7   3    3.8   0.49   4
5.5   4    7.4   0.94   3

我不知道如何绘制图表,所以我没有一个例子。我会尽力描述情节。我想在同一图表上为组A和组B绘制变量1。因此,在一张图上,我将为A组提供一个箱线图,为B组提供另一个填充V1数据的箱图。所以两个箱图将是并排的。有5个变量,我将有5个图表,每个图表并排有2个箱形图。如果我不清楚,请告诉我。谢谢。

5 个答案:

答案 0 :(得分:3)

ggplot最适合“长格式”数据(例如,每个值,变量和组都有一列)。您可以按如下方式重新排列数据:

A <- read.table(text='V1    V2   V3    V4     V5
6.5   2    11    0.5    6
7     1    8     0.34   8
5.4   4    7.8   0.45   5
3.4   6    9.1   0.72   5', header=TRUE)

B <- read.table(text='V1    V2   V3    V4     V5
5.0   5    9     0.4    7
2     7    5.2   0.69   5
3.2   2    2.9   0.79   2
6.8   9    6.5   0.43   6
4.7   3    3.8   0.49   4
5.5   4    7.4   0.94   3', header=TRUE)

d <- rbind(cbind(stack(A), group='A'), cbind(stack(B), group='B'))

前几行看起来像这样:

head(d)

##   values ind group
## 1    6.5  V1     A
## 2    7.0  V1     A
## 3    5.4  V1     A
## 4    3.4  V1     A
## 5    2.0  V2     A
## 6    1.0  V2     A

现在我们可以这样画出来:

library(ggplot2)
ggplot(d, aes(group, values)) + 
  geom_boxplot() +
  facet_wrap(~ind, scales='free_y')

enter image description here

答案 1 :(得分:3)

我想出的解决方案是将两个data.frame和一个变量结合起来,表明观察属于哪些组。然后,您可以使用melt中的reshape2函数将数据转换为data.frame,以便进行绘图。您可以使用facet_gridfacet_wrap为不同的变量创建单独的图。这是一种方法:

library(ggplot2)
library(reshape2)

# Combine two data.frame
df <- rbind(GroupA, GroupB)

# Create variable Group
df$Group <- rep(c("A", "B"), c(dim(GroupA)[1], dim(GroupB)[1]))

# Transform to long format
df <- melt(df, "Group")

ggplot(df, aes(x=Group, y=value)) + geom_boxplot() + facet_grid(~ variable)

enter image description here

答案 2 :(得分:2)

假设您的数据集的名称是grpa(A组)和grpb(B组)。首先为每个变量添加一个变量<div>

Group

grpa$Group <-"A"

然后将它们组合成一个数据帧

grpb$Group <-"B"

然后使用ggplot绘图,如:

combined <- rbind(grpa,grpb)

enter image description here

根据需要标记。

答案 3 :(得分:1)

# Adding a variable to the dataframes Group_A & Group_B as done from pervious users
Group_A$fac <- "A"
Group_B$fac <- "B"
Group_c <- rbind(Group_A,Group_B)
df <- melt(Group_c)

#You can plot the same in bwplot from library(lattice) 

bwplot(value~fac|variable,data=df,scales=list(relation="free"),as.table=T)

enter image description here

答案 4 :(得分:-1)

   par(mfrow=c(1,2))
   summary(A)
   summary(B)
   boxplot(A,ylim=summary(A)[[1]][1]) ##not sure about this just find where y is min
   boxplot(B,ylim=summary(B)[[1]][1]) ## still not sure
    ## adjusts the ylims in a way so that they are easy to compare you can also use boxplot(A,B) but that would make the graph look weird