【问题标题】:box plot from a dataframe with quantiles for multiple groups来自具有多组分位数的数据框的箱线图
【发布时间】:2018-02-09 07:18:03
【问题描述】:

我有一个数据框 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)
                 )

使用dfggplot 我需要绘制varCvarD 的箱线图,其中给定的五个分位数值(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")

这给出了如下图 - 我需要帮助来包括所有 groups 和test 的分面,以便可以在一个图表中看到两个测试的图。此外,我更喜欢在箱线图的两个端点处都有水平线。

【问题讨论】:

  • 你能分享一下你到目前为止所尝试的吗?
  • @EricFail 我到了某个地步,我可以得到一组的箱线图,其值在aes 中传递,例如ggplot(df[1,], aes(x=group, ymin = varC5th, lower = varC25th, middle = varC50th, upper = varC75th, ymax = varC95th)) + geom_boxplot(stat = "identity")

标签: r ggplot2 boxplot


【解决方案1】:

试试下面:

ggplot(df, 
       aes(x = group, ymin = varC5th, lower = varC25th,
           middle = varC50th, upper = varC75th, ymax = varC95th)) +
  geom_boxplot(stat = "identity") +
  geom_errorbar() + 
  facet_grid(.~test)


编辑: 重读您的帖子后,我意识到您需要 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")

【讨论】:

    猜你喜欢
    • 2021-04-18
    • 2018-12-05
    • 2015-12-20
    • 2021-11-15
    • 2022-01-03
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多