first time asking a question here on stackoverflow.
I wanted to add averages to my barplot, and also a different colour without adding new label boxes under the ggplot. My first attempt went like this.
library(dplyr)
library(ggplot2)
set.seed(1)
vec0 <- c(LETTERS[1:10],LETTERS[1:10])
vec1<- c(rep("A",10),rep("B",10))
vec2 <- sample(1:100,20,replace = T)
df <- data.frame(vec0,vec1,vec2)
Mean_A <- mean(df$vec2[1:10])
Mean_B <- mean(df$vec2[11:20])
#first try
Average <- data.frame(c("Average","Average"),c("A","B"),c(Mean_A,Mean_B))
names(Average)<- c("vec0","vec1","vec2")
df1 <- rbind(df,Average)%>%
arrange(vec1,vec2)
df1$vec0 <- factor(df1$vec0,levels = df1$vec0[1:11])
farger <- c(rep(c("blue","lightblue"),6),"red4","red",rep(c("blue","lightblue")))
ggplot(df1,aes(x = vec0, y = vec2, fill = vec1))+
geom_bar(stat = "identity",position = position_dodge2(reverse = TRUE))+
coord_flip()+labs(fill = "",x="" , y = "")+
theme(legend.position="bottom")+
scale_fill_manual(values = farger )
The code gave me this
Which does not have red colours for the average.
In my second try I changed the data like this.
#second try
Average <- data.frame(c("Average","Average"),c("A_Average","B_Average"),c(Mean_A,Mean_B))
names(Average)<- c("vec0","vec1","vec2")
df1 <- rbind(df,Average)%>%
arrange(vec1,vec2)
df1$vec0 <- factor(df1$vec0,levels = c(df1$vec0[1:5],df1$vec0[11],df1$vec0[6:10]))
ggplot(df1,aes(x = vec0, y = vec2, fill = vec1))+
geom_bar(stat = "identity",position = position_dodge2(reverse = TRUE))+
coord_flip()+labs(fill = "",x="" , y = "")+
theme(legend.position="bottom")+
scale_fill_manual(values = c("blue","red4","lightblue","red"),labels = c("A","","B",""))
Which gave me this
Which is what I want except I don’t want the red label boxes under the plot. Any tips putting me in the right direction would be highly apriciated.
New contributor
stenvik team is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.