Вам нужно немного изменить данные, используя функции 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)
)
![enter image description here](https://i.stack.imgur.com/iOFWw.png)
РЕДАКТИРОВАТЬ: , чтобы изменить порядок баров, вам нужно изменить 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)
)