来自具有多个组的分位数的数据框的箱线图
box plot from a dataframe with quantiles for multiple groups
我有一个数据框 df 如下。
df <- data.frame(test = c("Test1", "Test2", "Test1", "Test2"),
group = c("A", "A", "B", "B"),
varC5th = c(2, 3, 1, 5),
varC25th = c(20, 30, 10, 50),
varC50th = c(25, 35, 15, 55),
varC75th = c(35, 45, 25, 75),
varC95th = c(65, 75, 55, 105),
varD5th = c(0.2, 0.8, 0.6, 0.4),
varD25th = c(2, 8, 6, 4),
varD50th = c(3, 9, 7, 5),
varD75th = c(5, 11, 9, 7),
varD95th = c(9, 15, 13, 11)
)
使用 df
和 ggplot
我需要绘制 varC
和 varD
的箱线图,其中给定的五个分位数值(varX5th ... varX95th)由test
两组 A
& B
.
我尝试了什么
我到了某个程度,我可以得到一组的箱线图,其中值在 aes
中传递,如下所示。
ggplot(df[1,],
aes(x=group, ymin = varC5th, lower = varC25th,
middle = varC50th, upper = varC75th, ymax = varC95th)) + geom_boxplot(stat = "identity")
这给出了如下图 - 我需要帮助包括所有 group
s 和 test
分面,以便可以在一张图表中看到两个测试的图。另外,我更喜欢在箱线图的两个端点都有水平线。
试试下面的方法:
ggplot(df,
aes(x = group, ymin = varC5th, lower = varC25th,
middle = varC50th, upper = varC75th, ymax = varC95th)) +
geom_boxplot(stat = "identity") +
geom_errorbar() +
facet_grid(.~test)
编辑:
重读你的 post 后,我意识到你想要 4 个图,vartypeCD vs test12。为此,我们需要转换数据然后绘制:
library(ggplot2)
library(tidyr)
library(dplyr)
plotDat <-
gather(df, key = "Key", value = "Value", -c(test, group)) %>%
mutate(varType = substr(Key, 1, 4),
q = make.names(substr(Key, 5, 8))) %>%
select(-Key) %>%
spread(key = q, value = Value)
plotDat
# test group varType X25th X50th X5th X75th X95th
# 1 Test1 A varC 20 25 2.0 35 65
# 2 Test1 A varD 2 3 0.2 5 9
# 3 Test1 B varC 10 15 1.0 25 55
# 4 Test1 B varD 6 7 0.6 9 13
# 5 Test2 A varC 30 35 3.0 45 75
# 6 Test2 A varD 8 9 0.8 11 15
# 7 Test2 B varC 50 55 5.0 75 105
# 8 Test2 B varD 4 5 0.4 7 11
# now let's plot
ggplot(plotDat,
aes(x = group, ymin = X5th, lower = X25th,
middle = X50th, upper = X75th, ymax = X95th)) +
geom_boxplot(stat = "identity") +
geom_errorbar() +
facet_grid(varType ~ test, scale = "free_y")
我有一个数据框 df 如下。
df <- data.frame(test = c("Test1", "Test2", "Test1", "Test2"),
group = c("A", "A", "B", "B"),
varC5th = c(2, 3, 1, 5),
varC25th = c(20, 30, 10, 50),
varC50th = c(25, 35, 15, 55),
varC75th = c(35, 45, 25, 75),
varC95th = c(65, 75, 55, 105),
varD5th = c(0.2, 0.8, 0.6, 0.4),
varD25th = c(2, 8, 6, 4),
varD50th = c(3, 9, 7, 5),
varD75th = c(5, 11, 9, 7),
varD95th = c(9, 15, 13, 11)
)
使用 df
和 ggplot
我需要绘制 varC
和 varD
的箱线图,其中给定的五个分位数值(varX5th ... varX95th)由test
两组 A
& B
.
我尝试了什么
我到了某个程度,我可以得到一组的箱线图,其中值在 aes
中传递,如下所示。
ggplot(df[1,],
aes(x=group, ymin = varC5th, lower = varC25th,
middle = varC50th, upper = varC75th, ymax = varC95th)) + geom_boxplot(stat = "identity")
这给出了如下图 - 我需要帮助包括所有 group
s 和 test
分面,以便可以在一张图表中看到两个测试的图。另外,我更喜欢在箱线图的两个端点都有水平线。
试试下面的方法:
ggplot(df,
aes(x = group, ymin = varC5th, lower = varC25th,
middle = varC50th, upper = varC75th, ymax = varC95th)) +
geom_boxplot(stat = "identity") +
geom_errorbar() +
facet_grid(.~test)
编辑: 重读你的 post 后,我意识到你想要 4 个图,vartypeCD vs test12。为此,我们需要转换数据然后绘制:
library(ggplot2)
library(tidyr)
library(dplyr)
plotDat <-
gather(df, key = "Key", value = "Value", -c(test, group)) %>%
mutate(varType = substr(Key, 1, 4),
q = make.names(substr(Key, 5, 8))) %>%
select(-Key) %>%
spread(key = q, value = Value)
plotDat
# test group varType X25th X50th X5th X75th X95th
# 1 Test1 A varC 20 25 2.0 35 65
# 2 Test1 A varD 2 3 0.2 5 9
# 3 Test1 B varC 10 15 1.0 25 55
# 4 Test1 B varD 6 7 0.6 9 13
# 5 Test2 A varC 30 35 3.0 45 75
# 6 Test2 A varD 8 9 0.8 11 15
# 7 Test2 B varC 50 55 5.0 75 105
# 8 Test2 B varD 4 5 0.4 7 11
# now let's plot
ggplot(plotDat,
aes(x = group, ymin = X5th, lower = X25th,
middle = X50th, upper = X75th, ymax = X95th)) +
geom_boxplot(stat = "identity") +
geom_errorbar() +
facet_grid(varType ~ test, scale = "free_y")