Это можно сделать с помощью комбинации tidyr, dplyr и ggplot2.
# Your data
group <- c("G1", "G2", "G3", "G4", "G1", "G2", "G3", "G4", "G1", "G2", "G3", "G4")
mc <- c(5, 8, 14, 20, 10, 16, 30, 25, 15, 20, 25, 35)
mb <- c(10, 8, 7, 6, 15, 13, 9, 7, 29, 22, 20, 15)
df <- data.frame(group, mc, mb)
Сначала мы собираем ваши данные в длинном формате с категориями столбцов (cat) и значением.
# Requires library "tidyr"
library(tidyr)
# Gathering data
df_gathered <- gather(df, cat, value, 2:3)
Затем вы вычисляете среднее значение и ошибку для каждой комбинации группы и категории:
# Requires the library "dplyr"
library(dplyr)
# Calculating mean and error by group
df_mean_by_group <- df_gathered %>%
group_by(group, cat) %>%
summarise(mean = mean(value), error = qnorm(0.975)*sd(value)/length(value))
Наконец, мы строим график группировки линий по категориям (чтобы соединить их), и мы также окрашиваем их по категориям:
# Requires "ggplot2"
library(ggplot2)
# Plotting it all
ggplot(df_mean_by_group, aes(x=group, y=mean, colour=cat, group=cat)) +
geom_errorbar(aes(ymin=mean-error, ymax=mean+error), colour="black", width=.1) +
geom_line() +
geom_point(size=3)