我有两个不同的数据集,具有不同的观察数量。我想在同一个图表上绘制两个箱图,以便更容易进行比较。我可以绘制一个箱形图,但如果没有它们,就很难发现任何差异。
我有一些假数据。
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个箱形图。如果我不清楚,请告诉我。谢谢。
答案 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')
答案 1 :(得分:3)
我想出的解决方案是将两个data.frame
和一个变量结合起来,表明观察属于哪些组。然后,您可以使用melt
中的reshape2
函数将数据转换为data.frame
,以便进行绘图。您可以使用facet_grid
或facet_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)
答案 2 :(得分:2)
假设您的数据集的名称是grpa(A组)和grpb(B组)。首先为每个变量添加一个变量<div>
:
Group
grpa$Group <-"A"
然后将它们组合成一个数据帧
grpb$Group <-"B"
然后使用ggplot绘图,如:
combined <- rbind(grpa,grpb)
根据需要标记。
答案 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)
答案 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