I am attempting to order the variables in a ggplot stacked barplot. Here is my code so far:
levels(rs$Site) <- c("Mature","Little East","Upper Fill","Lower Fill")
# I have rearranged the levels to the desired order, but the output looks like
# c("Little East","Lower Fill","Upper Fill","Mature")
library(ggplot2)
library(scales)
ggplot(rs, aes(x = Site)) + geom_bar(aes(fill = At.Mature), position = 'fill') +
scale_x_discrete(limits=unique(rs$Site)) +
coord_flip()
However, the data is plotted from top to bottom as:
c("Mature","Upper Fill","Lower Fill","Little East")
# Notice this is simply a reverse of the output of the level reorder above
I have tried using factor() to reorder the levels, but the result remains the same.
Why does "Little East" move towards the end (bottom of the graph)? How can I fix this?
We can call the factor
again with levels
specified in the order
rs$Site <- factor(rs$Site, levels = c("Mature", "Little East",
"Upper Fill", "Lower Fill"))
and in the scale_x_discrete
, use levels(rs$Site)
ggplot(rs, aes(x = Site)) +
geom_bar(aes(fill = At.Mature), position = 'fill') +
scale_x_discrete(limits = levels(rs$Site)) +
coord_flip()
set.seed(24)
rs <- data.frame(Site = sample(c("Mature","Little East",
"Upper Fill","Lower Fill"), 30, replace = TRUE),
At.Mature = sample(c("Yes", "No"), 30, replace = TRUE))
Assigning the levels
is risky as it can change the values, e.g.
set.seed(24)
v1 <- factor(sample(LETTERS[1:5], 20, replace = TRUE))
v1
#[1] B B D C D E B D E B D B D D B E A A C A
#Levels: A B C D E
levels(v1) <- c('C', 'D', 'E', 'A', 'B')
v1
#[1] D D A E A B D A B D A D A A D B C C E C ### values got replaced
#Levels: C D E A B