首页 > 解决方案 > 在 R 上添加设置列值作为最小/最大误差线

问题描述

抱歉,如果以前有人问过这个问题,但很难说清楚才能找到答案。

我有以下一组数据。在 R 中,我想为 和 构建一个PV1条形图。对于误差线,我想将and设置为最小值,并将and设置为最大值。PV2AvgReadAvgUniqMinReadMinUniqMaxReadMaxUniq

如果您能提供帮助,将不胜感激。如果以前有人问过这个问题,我再次道歉。

         AvgRead  MinRead  MaxRead AvgUniq MinUniq MaxUniq
PV1          20     10        40     40       20     80
PV2          40     20        80     80       40     160

标签: rsortingggplot2dataset

解决方案


melt()您需要使用和dcast()函数稍微重塑数据reshape2

library(reshape2)
library(ggplot2)

df <- data.frame(
  row.names = c("PV1", "PV2"),
  AvgRead = c(20, 40),
  MinRead = c(10, 20),
  MaxRead = c(40, 80),
  AvgUniq = c(40, 80),
  MinUniq = c(20, 40),
  MaxUniq = c(70, 160)
)

df$name <- row.names(df)

df_molten <- melt(df)
df_molten$var1 <- substr(df_molten$variable, 1, 3)
df_molten$var2 <- substr(df_molten$variable, 4, 10000)

df_cast <- dcast(df_molten, name + var2 ~ var1, value.var = "value")

ggplot(data = df_cast, aes(x = name, y = Avg, fill = var2)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_errorbar(
    aes(ymin = Min, ymax = Max),
    width = 0.5,
    size = 1.3,
    position = position_dodge(0.9)
  )

在此处输入图像描述

编辑:要更改条形的顺序,您需要将 var2 更改为因子并相应地对级别进行排序:

df_cast <- dcast(df_molten, name + var2 ~ var1, value.var = "value")
df_cast$var2 <- factor(df_cast$var2, levels = c("Uniq", "Read"))

ggplot(data = df_cast, aes(x = name, y = Avg, fill = var2)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_errorbar(
    aes(ymin = Min, ymax = Max),
    width = 0.5,
    size = 1.3,
    position = position_dodge(0.9)
  )

推荐阅读