With ggplot, it is essential to have a single data frame with everything in it (at least for a single plotting layer, e.g., all the bars in a plot). You create a data frame of the column sums, and then try to use external vectors for the id and the grouping, which makes things difficult.
This is how I would do it:
means = rbind(
data.frame(mean = colSums(M), source = "M", col = 1:ncol(M)),
data.frame(mean = colSums(M2), source = "M2", col = 1:ncol(M2))
)
means$col = factor(means$col)
## one nice data frame with everything needed for the plot
means
# mean source col
# 1 -0.6400 M 1
# 2 -1.4650 M 2
# 3 -0.8850 M 3
# 4 -1.6950 M 4
# 5 -2.0300 M 5
# 6 -0.2700 M 6
# 7 -0.3640 M2 1
# 8 -1.1240 M2 2
# 9 -0.8850 M2 3
# 10 -1.2775 M2 4
# 11 -1.4770 M2 5
# 12 -0.2990 M2 6
ggplot(means, aes(x = col, y = mean, fill = source)) +
geom_bar(stat="identity", position = 'dodge')
You seem to want error bars too. I have no idea what would define those error bars – if you look at geom_errorbar it expects aesthetics ymin and ymax. If you calculate whatever values you want and add them as column to the data frame above, adding the error bar to the plot should be easy.
4
solved How to R present two colsums with ggplot stat_summary?
