具有标准偏差和范围的带的箱形图

时间:2017-04-01 23:31:04

标签: r plot ggplot2

我是R和ggplot2的新手。任何帮助深表感谢!我这里有一个数据集,我正在尝试图表

   weight band  mean_1     mean_2  SD_1       SD_2   min_1  min_2   max_1  max_2
    1            5         .           3        .    0.17       .    27   .
    2            6         .         3.7        .     1.1       .    23   .
    3            8         8         4.3        4.1     1   1.749    27   27
    4            8         9         3.3        6     2.3   1.402    13   42

在这组数据中,我试图在给定的weight_band(1-4)下绘制平均值1和平均值2的条形图,并应用误差条(分别为1和2)和最大值(分别为1和2)。 “。”表示没有数据。

我浏览过stackoverflow和其他网站,但找不到我想要的解决方案。

我的代码如下:

sk1 <- read.csv(file="analysis.csv")    

library(reshape2)

sk2 <- melt(sk1,id.vars = "Weight_band")
c <- ggplot(sk2, aes(x = Weight_band, y = value, fill = variable))
c + geom_bar(stat = "identity",  position="dodge")

但是,使用此方法时,它不会将图形限制为仅绘制平均值。是否有一组代码可以这样做?此外,有没有一种方法将min和max作为误差条应用于它们各自的均值?我提前感谢大家。这将有助于我提高对R的ggplot2函数的理解

1 个答案:

答案 0 :(得分:1)

这应该让你接近,我们需要做一些数据清理和重塑以使ggplot满意:)

library(reshape2)

df <- read.table(text = "weight_band  mean_1     mean_2  SD_1       SD_2   min_1  min_2   max_1  max_2
                 1            5         .           3        .    0.17       .    27   .
                 2            6         .         3.7        .     1.1       .    23   .
                 3            8         8         4.3        4.1     1   1.749    27   27
                 4            8         9         3.3        6     2.3   1.402    13   42", header = T)
sk2 <- melt(df,id.vars = "weight_band")

## Clean

sk2$group <- gsub(".*_(\\d)", "\\1", sk2$variable)
# new column used for color or fill aes and position dodging
sk2$variable <- gsub("_.*", "", sk2$variable)
# make these variables universal not group specific

## Reshape again

sk3 <- dcast(sk2, weight_band + group ~ variable)
# spread it back to kinda wide format
sk3 <- dplyr::mutate_if(sk3, is.character, as.numeric)
# convert every column to numeric if character now

# plot values seem a little wonky but the plot is coming together
ggplot(sk3, aes(x = as.factor(weight_band), y = mean, color = as.factor(group))) +
    geom_bar(position = "dodge", stat = "identity") +
    geom_errorbar(aes(ymax = max, ymin = min), position = "dodge")

enter image description here