I'd like to plot a faceted ggplot2 dot plot. x-axis is continuous, y-axis is a list of animals. Two variables are plotted and faceted according to eating behavior.
The y-axis is on a free scale because each animal only appears in one eating behavior category.
library(ggplot2)
# First clean up the data set:
msleep.noNA <- msleep[!is.na(msleep$vore),]
msleep.noNA.red <- msleep.noNA[c(1,3,6,7)]
msleep.noNA.red <- msleep.noNA.red[!is.na(msleep.noNA.red[4]),]
msleep.noNA.red <- melt(msleep.noNA.red)
pg <- ggplot(msleep.noNA.red, aes(value, name, colour = variable)) +
geom_point() +
facet_grid(vore ~ ., scale="free_y", space = "free_y")
pg
# Try to reverse order of the y axis:
pg + scale_y_reverse()
# Not possible because its a factor, but it's not classified as such:
class(msleep.noNA.red$name)
Does anybody have some clues as to how I can make the list of animal names alphabetical in each sub-plot?
You can transform the string vector to a factor and specify the order of levels:
The following command will create a factor. The levels are in decreasing alphabetical order:
msleep.noNA.red <- within(msleep.noNA.red,
name <- ordered(name, levels = rev(sort(unique(name)))))
Now you can plot the data:
pg <- ggplot(msleep.noNA.red, aes(value, name, colour = variable)) +
geom_point() +
facet_grid(vore ~ ., scale="free_y", space = "free_y")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With